为什么hibernate会在删除时生成交叉连接?

时间:2017-04-25 17:08:05

标签: postgresql hibernate jpa

我正在使用PostgreSQL 9.6和Hibernate 5.2.10并且有3个实体:

@Entity  
@Table(name = "entity1")
public class Entity1 {
    @Id
    private long id;

    @ManyToOne
    @JoinColumn(name = "entity2_id")
    private Table2 table2;
}

@Entity  
@Table(name = "entity2")  
public class Entity2 {
    @Id
    private long id;

    @ManyToOne
    @JoinColumn(name = "entity3_id")
    private Table3 table3;
}

@Entity  
@Table(name = "entity3")  
public class Entity3 {
    @Id
    private long id;
}

我需要在Entity3加入Entity2过滤时删除Entity1的出现,如下所示:

em.createQuery("delete from Entity1 e where e.entity2.entity3 = :entity3")

Hibernate生成以下SQL:

delete from entity1 cross join entity2 entity2_ where entity3_id=?

问题是PostgreSQL没有识别交叉连接,我没有找到任何其他方法来做到这一点(除了使用本机查询)。

PS:在数据库中,所有表都有外键。

1 个答案:

答案 0 :(得分:0)

现在我发现在删除查询中不可能使用连接(实际上是从EclipseLink迁移到Hibernate,在EclipseLink上它可以工作,只是在Hibernate上没有)。
Hibernate Exception on MySQL Cross Join Query