1

と言う2つのクラスがAありBます。
AのセットをBプロパティとして持っています。BについてはわかりませんA

Class A {
    @OneToMany(fetch=FetchType.LAZY)
    @JoinTable(name = "A_B_MAPPING", joinColumns = @JoinColumn(name = "A_ID") , inverseJoinColumns = @JoinColumn(name = "B_ID"))
    private Set<B> bs;
}

A問題は、を持たないレコードを削除したい場合B、HQL がそれを理解できないことです。私のコードは次のようなものです:

String hql = "DELETE FROM A WHERE bs IS NULL";
Query query = getSession().createQuery(hql);
query.executeUpdate(); // <-- Here an exception is thrown

どうやら、HQL はこのプロパティが列ではないことを理解できず、に結合する必要がありA_B_MAPPINGます。また、生成されたクエリがこのプロパティ を!として
参照していることにも気付きました。bs
non-qualified-property-ref

問題は、目標を達成するためにクエリをどのように変更できるかということです。

4

1 に答える 1

0

HQL では、エイリアスを宣言してインスタンス変数として使用し、フィールドにアクセスする必要があります。次のようにクエリを変更してみてください。

String hql = "DELETE FROM A a WHERE a.bs IS NULL";

HQL とコレクションのもう 1 つの問題は、コレクションが null ではなく空になる可能性があることです。その場合、is empty代わりにis null次を使用する必要があります。

String hql = "DELETE FROM A a WHERE a.bs IS EMPTY";

is empty問題を解決するにはクエリフォームが必要だと思います。

于 2013-07-06T11:05:00.203 に答える