0

您好我有一个关于将简单的 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"不被接受。我如何写我的限制?

4

1 回答 1

0

这可能是因为 Hibernate 试图将a+b解析为您的实体的属性,而您得到

org.hibernate.QueryException:无法解析属性: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创建自定义标准

于 2013-08-13T11:58:06.697 回答