2017-04-25 9 views
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:データベースにはすべてのテーブルに外部キーがあります。

+1

hibernateがPostgreSQLデータベースを認識していることを確認してください。方言は正しく設定されていますか?アプリが起動しているときにログにその情報が表示されます。 –

+0

はい、認識します。これはデフォルトでPostgreSQL94Dialectを使用しています。他のクエリはうまくいきますが、そうでないものもあります。 –

答えて

0

削除クエリで結合を使用できないことがわかりました(実際は、EclipseLinkからHibernateへ移行していましたが、EclipseLinkではHibernate上でのみ動作していました)。
Hibernate Exception on MySQL Cross Join Query

関連する問題