最近、Criteria API のサンプル コンポーネントによるクエリを使い始めたところ、奇妙な問題に遭遇しました。検索を実行しようとすると、org.hibernate.QueryException がスローされます。
私のシナリオは次のとおりです。
クラス A があり、そのプロパティの 1 つとして、クラス B のインスタンスのセット (Set< B> listOfBs) があります。これは、A では 1 対多の関係としてマップされます。
B のサンプル インスタンスに基準クエリを設定することを望んでいました。これは私が使用している(または望んでいる)コードです:
Criteria aCrit = session.createCriteria(A.class);
A aExampleInstance = new A();
Example aExampleCriteria = Example.create(aExampleInstance );
Criteria bCrit = atCrit.createCriteria("listOfBs");
B bExampleInstance = new B();
bExampleInstance .setProperty("somevalue");
bCrit.add(Example.create(bExampleInstance ));
List<A> results = aCrit.add(aExampleCriteria).list();
私は XML マッピングを使用しており、A は次のように B との関係をマッピングしています (A.hbm.xml):
<set name="listOfBs" table="B" inverse="false" cascade="all" lazy="true">
<key column="A_ID" not-null="true"/>
<one-to-many class="B"/>
</set>
これは正しいアプローチではない可能性があることを認識しています。より良い提案があれば大歓迎です。いずれにせよ、問題は、例外が発生することです。
org.hibernate.QueryException: プロパティを解決できませんでした: _com of: B
私は検索して、例外が私に何を伝えているのかを理解しました。しかし、私のクラスのいずれにもそのようなプロパティ名が宣言されていません。これは、永続性を透過的に見せるために Hibernate が内部で使用するインストルメンテーションの一部であると思われます。
これが既知の問題なのか、人々が使用した回避策があるのか 、それとも新しいバージョンで解決されているのか知りたいです。休止状態 3.6.6 を使用しています。
アドバイス/経験をいただければ幸いです。
ありがとう!