您好我有一个关于将简单的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"
。我该如何写限制?
答案 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
来创建自定义条件。