hibernate 条件限制 : comparing two properties as simple expression

标签 hibernate criteria restrictions

我有一个 Hibernate Criteria,以下适用:

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 不是一个实用的选择。)

最佳答案

我就是这样解决的:

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)"));

关于 hibernate 条件限制 : comparing two properties as simple expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14195179/

相关文章:

java - Hibernate搜索查询,受子类限制?

java - Hibernate 与同一实体的递归多对多关联

java - Hibernate 和 Raw JDBC 应用程序的混合正在锁定

java - 创建名为 'webSecurityConfig' 的 bean 时出错,因为当我尝试将 UserService Bean Autowiring 到 WebSecurityConfig 中时,它不存在

java - Hibernate Criteria API - 添加标准 : string should be in collection

php - 在 php 中对 Knapsack 算法添加限制

java - com.thoughtworks.xstream.converters.ConversionException

java - JPA CriteriaBuilder 子查询多选

grails - 用 “and'而不是“or”生成常规查询

hibernate - Hibernate 函数 Restrictions.allEq(Map<String, Object>) 如何处理空值?