0

関連する2つのテーブルがあります。

+-----------+           +----------+
|   First   |  *     1  |  Second  |
+-----------+ --------- +----------+
| fk_Second |           | id       |
| version   |           | ...      |
| ...       |           | y        |
| x         |           +----------+
+-----------+

HibernateにはからまでのManyToOne定義があります。これは表の1つです(ただし、この場合は関係ないと思います)。FirstSecond{fk_Second, version}composite-idFirst

私はCriteria呼び出しを書き込もうとしています。これは、SQLでは次のようになります。

SELECT * FROM First WHERE 
   First.fk_Second = Second.id AND 
   First.x = Second.y

最後のビット(余分な結合条件)を生成する際に問題が発生しています。

Criteria c = session.createCriteria(First.class);
   .createCriteria("second", "join_between_first_and_second")
   .add(Restrictions.eqProperty("y", "x")   // <- fails: "x" is not found

この状況ではHQLクエリを使用できません。これを別の方法で書く方法はありますか?これはサブクエリ/を避けて書くことができますDetachedCriteriaか?

4

2 に答える 2

1
Criteria c = session.createCriteria(First.class, "first");
c.createAlias("first.second", "theSecond");
c.add(Restrictions.eqProperty("first.x", "theSecond.y");

プロパティにエイリアスを追加しない場合、プロパティは基準のルートエンティティの一部と見なされます(この場合は最初)。

于 2012-05-31T11:04:41.220 に答える
0

HQLの「With」句を試してください。

SELECT f.* FROM First f left join Second s ON f.fk_Second = s.id with f.x = s.y;
于 2012-05-31T11:03:58.957 に答える