2017-05-31 35 views
0

我指定@JoinTable@ManyToMany,以便我可以指定表,列和外键的名称。当我指定一个休眠生成它自己的连接表

Hibernate似乎正在生成我的地雷,但它仍然试图生成它自己的。


下面是有问题的@ManyToMany的实体。仅包含实体的相关代码。

@Entity 
@Table(name = "DAMAGE") 
public class DamageReport { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "DAMAGE_ID_GENERATOR") 
    @SequenceGenerator(name = "DAMAGE_ID_GENERATOR", sequenceName = "DAMAGE_ID_SQ") 
    @Column(name = "DAMAGE_ID") 
    private Long id; 

    //...Bunch of other fields 

    @ManyToMany 
    @JoinTable(name = "BOARD_MEMBER_DAMAGE_REPORTS", joinColumns = { 
      @JoinColumn(name = "DAMAGE_REPORT_ID") }, inverseJoinColumns = { 
        @JoinColumn(name = "BOARD_MEMBER_ID") }, foreignKey = @ForeignKey(name = "DAMAGE_REPORT_ID_FK"), inverseForeignKey = @ForeignKey(name = "BOARD_MEMBER_ID_FK")) 
    private Set<BoardMember> boardMembers; 
} 

下面是其他实体在@ManyToMany。仅包含实体的相关代码。

@Entity 
@Table(name = "BOARD_MEMBER") 
public class BoardMember { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "BOARD_MEMBER_ID_GENERATOR") 
    @SequenceGenerator(name = "BOARD_MEMBER_ID_GENERATOR", sequenceName = "BOARD_MEMBER_ID_SQ") 
    @Column(name = "BOARD_MEMBER_ID") 
    private Long id; 

    @ManyToMany 
    public Set<DamageReport> damageReports; 
} 

任何帮助是极大的赞赏。

回答

0

另一侧上使用的mappedBy完成双向映射:

@ManyToMany(mappedBy = "boardMembers") 
public Set<DamageReport> damageReports; 
+0

哇。那很简单。谢谢! - 有没有一个原因,我不能在'DamageReport'一侧添加这个? – qbolt

+0

是的。在双向映射中,必须始终存在一个所有者方(本例中为DamageReport),而另一方(BoardMember)必须**仅引用所有者方(使用mappedBy =“boardMembers”)。 – adyjr