@OneToMany 与非主键 Hibernate 的关系
Posted
技术标签:
【中文标题】@OneToMany 与非主键 Hibernate 的关系【英文标题】:@OneToMany relationship with non primary key Hibernate 【发布时间】:2013-02-18 11:23:44 【问题描述】:我有一个 @Entity 叫 Team as
@Entity
@Table(name="projects_participants")
public class Team
@Id`enter code here`
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private int id;
public int getId()
return id;
public void setId(int id)
this.id = id;
@Column(name="participants_id")
private int participants_id;
public int getParticipants_id()
return participants_id;
public void setParticipants_id(int participants_id)
this.participants_id = participants_id;
/*
@CollectionOfElements
private Set<Projects> projectsParticipant;
@ManyToMany(fetch = FetchType.LAZY,mappedBy = "team")
public Set<Projects> getProjectsParticipant()
return projectsParticipant;
public void setProjectsParticipant(Set<Projects> projectsParticipant)
this.projectsParticipant = projectsParticipant;
*/
我有另一个 bean 名称 Projects 喜欢
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "projects_participants", joinColumns =
@JoinColumn(name = "project_id") ,
inverseJoinColumns = @JoinColumn(name = "participants_id",referencedColumnName="participants_id"))
public Set<Team> getTeam()
return team;
public void setTeam(Set<Team> team)
this.team = team;
它工作正常,但问题是 project_participants 表有 project_id 和 Team 表的 id。但我想要 Team 表的 project_id 和 Participants_id。 project_participants 表如下
参与者表格为 *
最后我想要的是表 project_participants 应该有 project_project_id 和 participants_id(不是 team_id)。提前谢谢。
【问题讨论】:
【参考方案1】:在我看来,您正在尝试建模 m:n 关系,但没有使用正确的注释和原则。
1) 将@ManyToMany
与@JoinTable
结合使用,对m:n 关系进行建模,如jee5 api 中所述。
2) 不要像 participants_id
那样通过 ID 列模拟与其他对象的关系。使用 JPA,您可以处理对象,而不是它们的 ID,因此您的列将是 Participant
。
【讨论】:
以上是关于@OneToMany 与非主键 Hibernate 的关系的主要内容,如果未能解决你的问题,请参考以下文章
JPA 或 Hibernate 生成(非主键)列值,不是从 1 开始