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:在數據庫中所有的表都有外鍵。
請確定hibernate能夠識別PostgreSQL數據庫嗎?是方言矯正嗎?你應該在應用程序啓動時看到日誌。 –
是的,它承認。它默認使用PostgreSQL94Dialect。其他查詢的工作,只是一些這樣的不是。 –