Hibernate @JoinTable无法正常工作

时间:2017-03-28 19:06:26

标签: java hibernate one-to-many jointable many-to-one

在使用 @JoinTable 时,我的应用程序出现了这个奇怪的问题。

我有3个实体: EntityA EntityB EntityC

EntityA.class

@OneToMany(fetch = FetchType.LAZY, mappedBy = "entityA")
public Set<EntityB> getEntityBSet() {
    return entityBSet;
}

EntityB.class

@ManyToOne
@JoinColumn(name = "ID_ENTITY_A", nullable = false)
public EntityA getEntityA() {
    return entityA;
}

@ManyToOne
@JoinTable(name = "B_AND_C", 
            joinColumns = { @JoinColumn(name = "ID_ENTITY_B") }, 
            inverseJoinColumns = {@JoinColumn(name = "ID_ENTITY_C") })
public EntityC getEntityC() {
    return entityC;
}

EntityC.class

@OneToMany(cascade = CascadeType.ALL, mappedBy="entityC")
public Set<EntityB> getEntityBSet() {
    return entityBSet;
}

在我尝试通过entityA.getEntityBSet()访问entityB之前,一切正常。

Hibernate没有为关系 entityB.entityC 生成正确的SQL,从而创建了一个笛卡尔积:

SELECT ...
FROM ENTITY_B, B_C, ENTITY_C
WHERE B_C.ID_ENTITY_C = ENTITY_C.ID_ENTITY_C (+)
AND ENTITY_B.ID_ENTITY_A = ?

ENTITY_B和B_C之间应该有联接:

AND ENTITY_B.ID_ENTITY_B = B_C.ID_ENTITY_B

另一方面,当通过session.get()加载entityB时,生成的SQL对于该关系是正确的(entityB.entityC)。

任何帮助表示感谢。

0 个答案:

没有答案