@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_idparticipants_id(不是 team_id)。提前谢谢。

【问题讨论】:

【参考方案1】:

在我看来,您正在尝试建模 m:n 关系,但没有使用正确的注释和原则。

1) 将@ManyToMany@JoinTable 结合使用,对m:n 关系进行建模,如jee5 api 中所述。

2) 不要像 participants_id 那样通过 ID 列模拟与其他对象的关系。使用 JPA,您可以处理对象,而不是它们的 ID,因此您的列将是 Participant

【讨论】:

以上是关于@OneToMany 与非主键 Hibernate 的关系的主要内容,如果未能解决你的问题,请参考以下文章

设置实体框架与非主键字段的一对一映射

如何使用 JPA 和 Hibernate 在非主键上连接表

JPA 或 Hibernate 生成(非主键)列值,不是从 1 开始

Hibernate一方对多方非主键的关联

在 SQL Server 中的非主键上添加 @ManyToOne 映射时出现问题

Hibernate - OneToMany 注释导致选择查询的左连接不匹配