3

このようなスクリプトを基準に変換したいと思います。

SELECT ...
FROM A
WHERE 
  A.some_date > (select bdate from B where ...)
  OR (select bdate from B where ...) IS NULL

したがって、A.Some_date> B.bdateの場合、またはB.bdateがNULLの場合は、Aを返す必要があります。

Subqueries.notNull(DetachedCriteria)私は(があるように)あることを期待していましたがSubQueries.notExists(DetachedCriteria)、この方法は存在せず、これを実行するための他の何かを見つけられませんでした。

もちろん、カウントを返し、これが0以上かどうかを確認することでこれを回避できますが、2つの同一の(プロジェクションを除く)DetachedCriteriaを記述する必要があります。

上記の場合にNULLチェックを行うかどうか/どのように行うか、またはこれがHibernate基準APIで提供されない理由を誰かが知っていますか?おそらく正当な理由があります...

4

2 に答える 2

0

おもう

Subqueries.eq(null, yourDetachedCriteria)

動作するはずです。

于 2011-06-02T04:06:39.610 に答える
0

クラスMySubqueries:

public class MySubqueries {
    public static Criterion isNull(DetachedCriteria dc) {
        return new IsNullSubqueryExpression(null, null, dc);
    }
}

クラスIsNullSubqueryExpression:

public class IsNullSubqueryExpression extends SubqueryExpression {

    protected IsNullSubqueryExpression(String op, String quantifier, DetachedCriteria dc) {
        super(op, quantifier, dc);
    }

    @Override
    protected String toLeftSqlString(Criteria criteria, CriteriaQuery criteriaQuery) {
        return "";
    }

    @Override
    public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
        return super.toSqlString(criteria, criteriaQuery) + " IS NULL";
    }
}

使用する:

detachedCriteria.add(MySubqueries.isNull(subDetachedCriteria))
于 2021-01-28T04:38:07.120 に答える