Java标准限制列的总和低于值

时间:2012-08-16 11:18:32

标签: java sql criteria restrictions

您好我有一个关于将简单的SQL语句转换为java hibernate限制的问题。

SQL:

SELECT a + b FROM col WHERE a + b < 10

当我尝试将其转换为我得到的标准时:

Criteria criteria = createCriteria();
criteria.createAlias("col","col").add(Restrictions.lt("a+b",10));

但似乎不接受字符串"a+b"。我该如何写限制?

1 个答案:

答案 0 :(得分:0)

可能是因为Hibernate正在尝试将 a + b 解析为您实体的属性,而且您得到了

org.hibernate.QueryException: could not resolve property: a+b

几乎没有可能的解决方案:

第一:sql限制:

//Hibernate 4.x
criteria.add(Restrictions.sqlRestriction("col_a+col_b < ?", Integer.valueOf(10), org.hibernate.type.StandardBasicTypes.INTEGER);

// Hibernate 3.x
criteria.add(Restrictions.sqlRestriction("col_a+col_b < ?", Integer.valueOf(10),       org.hibernate.Hibernate.INTEGER);

有一个问题是您必须使用列名而不是属性名。

第二名:公式:

使用 @Formula 注释

向您的实体添加虚拟列
@org.hibernate.annotations.Formula("a + b")
private int aSumB;

并将其用作标准属性:

criteria.add(Restrictions.lt("aSumB", Integer.valueOf(10));

第三个自定义标准:

如果您正在使用它,请考虑通过实施 org.hibernate.criterion.Criterion

来创建自定义条件。