Hibernate 如何使用条件返回具有选定列的实体
我对Hibernate很陌生。我想要一个使用hibernate标准的Hibernate 如何使用条件返回具有选定列的实体,hibernate,criteria,Hibernate,Criteria,我对Hibernate很陌生。我想要一个使用hibernate标准的列表,但只需要填写用户id和名称字段。可能吗?类似如下所示的查询: SELECT user.id, user.name FROM user 注意。通常不希望部分加载对象的属性。但如果必须这样做,请看以下内容: 对于类似于普通报告的行为,您可以使用实体查询: sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class); 这正
列表
,但只需要填写用户id和名称字段。可能吗?类似如下所示的查询:
SELECT user.id, user.name FROM user
注意。通常不希望部分加载对象的属性。但如果必须这样做,请看以下内容: 对于类似于普通报告的行为,您可以使用实体查询:
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").addEntity(Cat.class);
这正是投影的目的。以下是一个例子:
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();
Criteria cr=session.createCriteria(User.class)
.setProjection(Projections.projectionList()项目)
.add(Projections.property(“id”),“id”)
.add(Projections.property(“名称”),“名称”))
.setResultTransformer(Transformers.aliasToBean(User.class));
List=cr.List();
事实上,如果您查看有关“惰性属性获取”的文档,它们会明确指出:
“至少对于只读事务而言,避免不必要的列读取的另一种(更好的?)方法是使用HQL或条件查询的投影功能。这避免了构建时字节码处理的需要,当然是首选解决方案。”
顺便说一下,您可能还对一个相关问题感兴趣:
我真的很晚才回答这个问题,但是,您可以向查询对象添加自定义结果转换器,如下所示
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();
可以通过HQL查询来完成吗?