0

HQL クエリを基準に移植する際に問題があります。

抽象化のために、トランザクション -> グループ -> アカウント <- 履歴 <- トランザクションなどのエンティティ トランザクション、アカウント、グループ、および履歴があるとします。以下のER図も参照してください。

ここに画像の説明を入力

次の HQL クエリを使用して、null グループまたはグループ内のアカウントを使用してすべてのトランザクションを取得します。

FROM Transaction t
INNER JOIN t.history AS h
INNER JOIN t.group AS g
WHERE t.group IS NULL OR history.account MEMBER OF g.accounts

そして今、クエリを に変換する必要がありますが、休止状態の制限には基準DetachedCriteriaのメソッドがないため、方法がわかりません。MEMBER OF

誰でも私を助けることができますか?

4

2 に答える 2

0

次のように Restrictions.eqProperty を使用する必要があります。これがあなたを助けることを願っています。

DetachedCriteria hsql = DetachedCriteria.forClass(Transaction.class, "t")
   .addAlias("t.history", "h")
   .addAlias("t.group", "g")
   .add(Restrictions.or(
        Restrictions.isNull("t.group"),
        Restrictions.eqProperty("h.account", "g.account")
   ));
于 2013-08-02T08:45:43.063 に答える
0

ここで、うまくいくクエリは次のとおりです。

DetachedCriteria criteria = DetachedCriteria.forClass(Transaction.class, "t")
.createAlias("t.history", "h")
.add(Restrictions.or(Restrictions.isNull("t.group"),
     Subqueries.propertyNotIn("h.account.id", DetachedCriteria.forClass(Group.class, "g")
    .createAlias("g.accounts", "a", CriteriaSpecification.LEFT_JOIN)
    .add(Restrictions.eqProperty("t.group.id", "g.id"))
    .add(Restrictions.isNotNull("a.id"))
    .setProjection(Projections.property("a.id")))));

それは私たちの問題を解決します。この回答を解決策としてマークします。

于 2013-08-05T17:07:47.653 に答える