我是Hibernate的新手。我希望List<User>
使用hibernate标准,但只填充用户ID和名称字段。那可能吗?类似于下面显示的查询:
SELECT user.id, user.name FROM user
问候。
答案 0 :(得分:55)
这正是预测的目的。这是一个例子:
Criteria cr = session.createCriteria(User.class)
.setProjection(Projections.projectionList()
.add(Projections.property("id"), "id")
.add(Projections.property("Name"), "Name"))
.setResultTransformer(Transformers.aliasToBean(User.class));
List<User> list = cr.list();
事实上,如果你查看“lazy property fetching”的文档,他们会特别说:
“避免不必要的列读取的另一种(更好的?)方法,至少对于只读事务,是使用HQL或Criteria查询的投影功能。这避免了构建字节码处理的需要,当然是首选的解决方案。“
顺便提一下,您可能也有兴趣了解相关问题: Hibernate Query By Example and Projections
答案 1 :(得分:3)
我回答这个问题的时间已经很晚了,但是,您可以像下面一样向Query对象添加自定义结果转换器。
Query query = session
.getNamedQuery(
"someNamedQueryWhichISHQL")
.setString("cod", "10")
.setResultTransformer(new ResultTransformer() {
public Object transformTuple(Object[] row, String[] arg1) {
User usr = new User(row[0],row[1]);
return usr
}
public List transformList(List arg0) {
return arg0;
}
});
return query.list();
答案 2 :(得分:1)
通常,您不希望部分加载对象的属性。但如果必须,请看:
对于类似普通报告的行为,您可以使用实体查询:
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class);
http://docs.jboss.org/hibernate/stable/core/manual/en-US/html/querysql.html#d0e17633