3

私はHibernateCriteriaを持っていますが、その基準は次のとおりです。

criteria.add(Restrictions.eqProperty("x", "tbl.y"));

しかし、ここで基準を変更して、可能な値の範囲をチェックしたいと思います('x'と'y'は両方とも整数です)。たとえば、これは機能しません。

criteria.add(Restrictions.geProperty("x", "tbl.y - 1"));

次のようなsqlRestrictionを使用してみました。

criteria.add(Restrictions.sqlRestriction("{alias}.x >= (tbl1_.y - 1)"));

しかし、実際のエイリアス名('tbl1_')を知る方法は?

これを機能させるには、副選択を使用する必要がありますか?(現在、HQLの使用は実用的なオプションではありません。)

4

2 に答える 2

6

これが私がそれを解決した方法です:

criteria.add(new PropertyExpression(null, null, null) {
    @Override
    public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
        String x = criteriaQuery.getColumnsUsingProjection(criteria, "x")[0];
        String y = criteriaQuery.getColumnsUsingProjection(criteria, "tbl.y")[0];
        StringBuilder result = new StringBuilder();
        result.append(x);
        result.append(">= (");
        result.append(y);
        result.append(" - 1)");
        return result.toString();
    }
});

残念ながら、Hibernate Criteria API を使用してこれを行う方法はありません (別名結合テーブル):

criteria.add(Restrictions.sqlRestriction("{alias}.x >= ({tbl}.y - 1)"));
于 2013-01-07T14:11:47.127 に答える