使用Hibernate通过公共桥表映射3个实体

祝福:

我想模拟一个团队需要多种技能才能运作的事实。许多人可以具有一定的技能。一个人有很多技能。一个人可以成为许多团队的一部分。

我使用Hibernate对这种情况进行建模。我开始使用团队和技能这两个实体进行构建,并使用@ManyToMany批注来链接这些依赖项。试图添加第三个实体(人)是很困难的。我不知道如何建立该模型,将不胜感激。

我没有太多使用Hibernate的经验,所以这是一个挑战。

我已经搜索了信息,发现的大多数示例都是关于两个连接的实体,而我无法将这些示例扩展到包括第三个实体。

这些是我的实体:

package com.example.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import java.util.Set;

@Entity
public class Team {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    @ManyToMany
    private Set<Skill> skills;

    @ManyToMany
    private Set<Person> persons;
}



package com.example.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import java.util.Set;

@Entity
public class Skill {
    @Id
    @GeneratedValue
    private Long id;

    private String knowHow;

    @ManyToMany
    private Set<Team> teams;

    @ManyToMany
    private Set<Person> persons;
}



package com.example.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.Set;

@Entity
public class Person {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    private Set<Team> teams;
    private Set<Skill> skills;
}

这些是我的存储库:

package com.example.repository;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.example.entity.Competence;
import com.example.entity.Team;

import java.util.List;

@Repository
public interface TeamRepository extends CrudRepository<Team, Long> {
    List<Competence> findDistinctByKnowHow(String name);
}



package com.example.repository;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.example.entity.Competence;
import com.example.entity.Skill;

import java.util.List;

@Repository
public interface SkillRepository extends CrudRepository<Skill, Long> {

    List<Competence> findDistinctByKnowHow(String knowHow);

}



package com.example.repository;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.example.entity.Competence;
import com.example.entity.Person;

import java.util.List;

@Repository
public interface PersonRepository extends CrudRepository<Person, Long> {

    List<Competence> findDistinctByPerson(String name);

}
塔赫斯坦伯格:

解决此问题的一种方法是创建一个仅作为桥接实体存在的实体。这样,您可以在“真实”实体和桥实体之间添加三个不同的一对多关系。这样一来,您应该能够处理三对多关系。

但是,您可能必须“手动”处理桥实体中的数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Hibernate map <基本,实体>映射(3个表)

使用Hibernate将实体映射到表时出现BeanCreationException

通过中间表使用 ManyToOne 休眠映射实体

使用具有多个列的Hibernate实体连接3个表

使用实体框架联接3个表

Hibernate:映射两个实体

通过Java配置映射休眠表实体

将两个相同的表(相同的架构...)映射到Hibernate中的相同实体

在Hibernate中,如何使用第3个表在两个实体之间建立一对多连接?

如何通过使用MapStruct映射实体和实体名单与嵌套列表一个DTO?

使用公共列 POSTGRESQL 映射两个表之间的不同值

如何使用Hibernate映射实体内部的实体集合?

不知所措:通过Hibernate映射简单实体

Springboot Hibernate 实体映射

通过公共值js映射两个对象数组

如何使用导航属性通过映射表在两个实体上检索数据?

nhibernate通过代码映射,使用值对象列表映射实体

使用Hibernate公式从另一个表中选择一个实体

使用桥联接表

通过EF上的相关表映射整个实体

Hibernate:使用在另一个实体中引用的复合键来面对“ ID的残破列映射”

如何使用jpa / hibernate为实体映射字段定义索引?

使用Hibernate将PostgreSQL的refcursor映射到Java实体

如何使用Hibernate映射调整实体之间的关系?

使用jpa和hibernate查询未映射的实体

@SecondaryTables:将一个实体映射到多个表

将多个实体映射到一个表

使用 hibernate / spring-boot 连接 3 个表

如何使用.NET实体框架将数据插入到桥接表中?