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。

我原以为会有 a Subqueries.notNull(DetachedCriteria)(就像有 a 一样SubQueries.notExists(DetachedCriteria)),但是这种方法不存在,我也没有找到其他方法来解决这个问题。

我当然可以通过返回一个计数来解决这个问题,并检查它是否 > 0 或这样,但是我需要写 2 个相同的(除了投影)DetachedCriteria's。

有谁知道是否/如何对上述情况进行 is NULL 检查,或者为什么在 Hibernate 标准 API 中未提供此功能?也许有一个很好的理由...

4

2 回答 2

0

我认为

Subqueries.eq(null, yourDetachedCriteria)

应该管用。

于 2011-06-02T04:06:39.610 回答
0

我的子查询类:

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 回答