Hibernate多个ManyToMany关联导致错误的列数错误

时间:2014-03-20 13:21:09

标签: java hibernate orm mapping many-to-many

我有一些复杂的数据库结构,我想先解释一下。我们有以下表格:

Mandant (Id, Name)
Leistungsbereich (Id, Label)
Benutzer (Id, LoginName)

这里我们有两个关联表:

Mandant_Leistungsbereich (Id, MandantId, LeistungsbereichId)
Benutzer_Mandant_Leistungsbereich (Id, BenutzerId, MandantLeistungsbereichId)

主键始终是' Id'我认为列和外键是显而易见的。

对于前三个表,我有与Hibernate一起使用的相应Domain Java类。

要获取Leistungsbereich的所有Mandant项,我的Mandant域类中包含以下代码:

@JoinTable(
    name = "Mandant_Leistungsbereich",
    joinColumns = {
        @JoinColumn(
            name = "MandantId"
            )
        },
    inverseJoinColumns = {
        @JoinColumn(
            name = "LeistungsbereichId"
        )
    }
)
@ManyToMany( fetch = FetchType.LAZY )
private Set<Leistungsbereich> leistungsbereiche;

当我自动加载Mandant时,Java Set中加载了所有Leitungsbereich项。 Hibernate知道它必须在Mandant_Leistungsbereich关联表中进行搜索,所以到目前为止这个工作正常。

现在出现了奇怪的部分。我还想为Benutzer实现相同的目标,因为Benutzer应该有Mandant_Leistungsbereich个项目的列表(或更好说一组)。

所以我在Benutzer班级做同样的事情:

@JoinTable(
    name = "Benutzer_Mandant_Leistungsbereich",
    joinColumns = {@JoinColumn( name = "BenutzerId" ) },
    inverseJoinColumns = {@JoinColumn( name = "MandantLeistungsbereichId" ) }
)
@ManyToMany( fetch = FetchType.LAZY )
private Set<MandantLeistungsbereich> mandantLeistungsbereiche;

但是加载用户后会打印出以下错误:

org.hibernate.MappingException: Foreign key (FK_71hckf2bhqrp78gom71l6eq38:Benutzer_Mandant_Leistungsbereich [MandantLeistungsbereichId])) must have same number of columns as the referenced primary key (Mandant_Leistungsbereich [MandantId,LeistungsbereichId])

我真的不知道为什么hibernate认为Benutzer_Mandant_Leistungsbereich表需要Mandant_Leistungsbereich表的两个外键。在数据库和hibernate映射中,始终只有一个Id列作为主键,因此没有复合键。为什么hibernate告诉我外键需要两列?

0 个答案:

没有答案