Hibernate选择最大值大于

时间:2015-03-16 21:31:50

标签: java hibernate

我正在尝试让hibernate返回ID值最小的对象,该对象的ID值大于某个值。

我的代码是返回一个整数,而不是对象。

代码

Criteria criteria = session.createCriteria(Story.class);
Criterion storyId = Restrictions.ge("id", 2);
ProjectionList projList = Projections.projectionList();
projList.add(Projections.min("id"));
criteria.add(storyId);
criteria.setProjection(projList);
List<?> storyResult = criteria.list();
session.close();            
Story story = (Story) storyResult.get(0);

现在这是一个整数返回“3”。 3是下一个可用的ID,但为什么hibernate会给我一个整数而不是对象?

由于

1 个答案:

答案 0 :(得分:0)

通过添加Projection,您实际上是要求Hibernate将查询从SELECT * FROM TABLE更改为SELECT MIN(ID) FROM TABLE查询。这是投影的特征之一。

要实现您真正想要实现的目标,您需要使用投影来获取ID,然后使用另一个查询来检索对象。

Criteria idQuery = session.createCriteria(Story.class);
idQuery.add(Restrictions.ge("id", 2));
idQuery.setProjection(Projections.min("id"));
int returnedId = criteria.uniqueResult();

Criteria storyQuery = session.createCriteria(Story.class);
storyQuery.add(Restrictions.idEq(returnedId);
Story story = (Story) storyQuery.uniqueResult();
return story;