2017-04-25 34 views
2

我使用PostgreSQL 9.6與Hibernate 5.2.10,並有3個實體:爲什麼hibernate會在刪除時產生交叉連接?

@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; 
} 

我需要將所有刪除ENTITY1的occurencies加入時ENTITY2過濾通過ENTITY3,就像這樣:

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

請確定hibernate能夠識別PostgreSQL數據庫嗎?是方言矯正嗎?你應該在應用程序啓動時看到日誌。 –

+0

是的,它承認。它默認使用PostgreSQL94Dialect。其他查詢的工作,只是一些這樣的不是。 –

回答

相關問題