我想写一个Criteria查询,它会做这样的事情:
SELECT a, b FROM t WHERE a + b < 10
这可以使用Criteria API吗?
答案 0 :(得分:2)
是的。您可以使用Restrictions.sqlRestriction()使用本机SQL定义where子句。
Integer condition = 10;
List<Object[]> results = (List<Object[]>)session.createCriteria(someTable.class)
.add(Restrictions.sqlRestriction("a + b < ?" , condition , StandardBasicTypes.INTEGER ))
.setProjection(Projections.projectionList()
.add(Projections.property("a"))
.add(Projections.property("b"))
)
.list();
重点:
在返回结果中,列a的值存储在
Object[0]
,而b存储在Object [1]
。
Restrictions.sqlRestriction()中的输入参数是
数据库中的实际列名,而输入参数在
Projections.property()
是映射的java属性名称
实体。