【问题标题】:HIbernate Many to Many with self entity Using annotationHIbernate Many to Many with self entity 使用注解
【发布时间】:2013-02-16 08:52:06
【问题描述】:

我在 Hibernate 多对多关系中遇到问题。

我有一个名为 Projects 的表,其中包含以下字段:

(项目编号、项目名称、创建日期、项目经理)

我还为项目(多选组合框)填充了一个名为 team 的字段,该字段关联了多个项目成员。

因此,当我使用 Hibernate 将项目数据保存到 Projects 表中时,我希望生成另一个名为 Project_team 的表。它应包含以下字段:

(project_id, team_member_id)

例如,如果我输入类似 (Project Title="ERP",Created Date="16/2/1013" ,Project Manager="XYZ") 这样的数据,我应该有另一个表 project_team (project_id=1, team_member_id= 1)。

是自我多对多关系还是其他关系?我是否应该为 Team_member 制作另一个 bean,然后我必须执行多对多?

【问题讨论】:

  • 容纳团队的桌子是什么样的?一个人可以加入多个团队吗?您能否提供更多有关您的数据模型的信息?
  • 包含团队成员的表应该是 project_participants (project_id,participants_id) 例如 project_id 1,1 然后 participants_id 可能是 2,3 所以团队(用户 2 和 3)将用于项目(ID 为 1)。现在你得到了吗?抱歉,我没有以正确的格式提问。
  • 参与者如何与团队关联?我所追求的是这个团队表的结构,因为它改变了事物的映射方式。如果参与者有一个团队,则映射的方式与参与者有 1..n 个团队的情况不同。 particpants_id = team_member_id 吗?
  • 我是直接输入participant_ids。您无需考虑 TEAM。
  • 是的participant_id=team_member_id。

标签: java spring hibernate jakarta-ee hibernate-annotations


【解决方案1】:

您需要创建一个联结表来处理TeamProject 之间的多对多关联,但是您不需要此联结表的bean 或类。以下示例将在PROJECTPARTICIPANT 之间创建单向关联。您需要创建一个TEAM_MEMBERPARTICIPANT 表才能执行此关联。

Projects.java

public class Project{

@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, targetEntity = Participant.class)
@JoinTable(name = "PROJECT_TEAM", joinColumns = { @JoinColumn(name = "TEAM_MEMBER_ID", referencedColumnName = "PROJECT_ID") }, 
inverseJoinColumns = { @JoinColumn(name = "PARTICIPANT_ID", referencedColumnName = "PARTICIPANT_ID") })

    private List<Participant> team = new ArrayList<Participant>();

    //Accessors - get/setTeam method
}

此答案假设以下数据模型已到位:

CREATE TABLE PROJECT(
   PROJECT_ID int,
   PROJECT_TITLE varchar(50),
   CREATED_DATE DATE,
   PROJECT_MANAGER varchar(50)
);

CREATE TABLE PARTICIPANT(
   PARTICIPANT_ID int,
   NAME varchar(50),
   PROJECT_ID int
);

CREATE TABLE PROJECT_TEAM(
   PROJECT_ID int,
   PARTICIPANT_ID int
);

【讨论】:

  • 感谢您的快速回复。问题是我不想为参与者创建表格。我想要 Project bean 中的参与者字段,并且想要创建表 PROJECT_TEAM(PROJECT_ID int, PARTICIPANT_ID int);在 Project 表 &&& Project 表中插入数据期间不应有参与者 ID 列。我们可以使用@Transient 或其他东西。
  • 那么project表有participant_id列?您可以发布此表的 DDL 吗?
  • 当我插入项目名称、创建日期、项目经理参与者 ID 等项目数据时。 hibernate 应该生成 CREATE TABLE PROJECT( PROJECT_ID int, PROJECT_TITLE varchar(50), CREATED_DATE DATE, PROJECT_MANAGER varchar(50) ); CREATE TABLE PROJECT_TEAM(PROJECT_ID int, PARTICIPANT_ID int); Participants_id 是 Project Bean 的字段(但不是项目表中的列)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 2018-02-26
  • 1970-01-01
相关资源
最近更新 更多