2
私はHibernateは5.2.10でのPostgreSQL 9.6を使用していますし、持っている3エンティティ:なぜhibernateが削除時にクロス結合を生成するのですか?
em.createQuery("delete from Entity1 e where e.entity2.entity3 = :entity3")
:私はそれはこのように、Entity3によってEntity2フィルタリングに加入するときEntity1の発生回数をすべて削除する必要があり
@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;
}
そして、Hibernateは、次のSQLを生成:問題は、PostgreSQLはクロス結合を認識しないと、私は見つけられませんでしたということです
delete from entity1 cross join entity2 entity2_ where entity3_id=?
をnyこれを行う他の方法(ネイティブクエリを使用する以外)。
PS:データベースにはすべてのテーブルに外部キーがあります。
hibernateがPostgreSQLデータベースを認識していることを確認してください。方言は正しく設定されていますか?アプリが起動しているときにログにその情報が表示されます。 –
はい、認識します。これはデフォルトでPostgreSQL94Dialectを使用しています。他のクエリはうまくいきますが、そうでないものもあります。 –