我正在尝试让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会给我一个整数而不是对象?
由于
答案 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;