[英]How to get a particular property of all child entities as list in hibernate?
I have a parent class : 我有一个家长班:
public class User {
Long id;
String name;
@OneToMany(...)
List<Role> roles
...
}
A Role class: 角色类:
public class Role {
Long roleId;
Long roleName;
}
Can I query the user
table using Hibernate Query Language
to get a response like this: 我可以使用
Hibernate Query Language
查询user
表以获得如下响应:
public class ResponseModel {
Long userId;
Long userName;
List<String> roleNames;
}
Basically, I want some of the properties of user
and only the roleNames
of user and not the whole rich objects of Role
. 基本上,我只需要
user
某些属性,而只需要user
的roleNames
,而不是Role
的整个丰富对象。
You can use join hql and ResultTransformer 您可以使用join hql和ResultTransformer
UPDATED 更新
Example below returns a list of ResponseModels but not exactly what you would need. 下面的示例返回ResponseModels的列表,但并非完全满足您的需求。
It just starting point to understand how you can get only required fields. 这只是了解如何仅获取必填字段的起点。
List<ResponseModel> responseModel = session
.createQuery(
"select u.userId, r.roleId, r.roleName from User u join Role r ")
.setResultTransformer(
new ResultTransformer() {
@Override
public Object transformTuple(
Object[] tuple,
String[] aliases) {
return new ResponseModel(
(Long) tuple[0],
(Long) tuple[1]
(String) tuple[2]
);
}
@Override
public List transformList(List collection) {
return collection;
}
}
)
.getResultList();
Instead of using HQL you can use Criteria to get the values as a User Object. 代替使用HQL,您可以使用Criteria将值作为用户对象获取。
Criteria criteria = session.createCriteria(User.class);
criteria.setFetchMode("roles", FetchMode.SELECT);
From the Criteria list you can get the names of Roles you need. 从“ 条件”列表中,您可以获取所需角色的名称。
User user = (User)criteria.list().get(0);
List<Role> roleList = user.getRoles();
List<String> roleNames = new ArrayList();
for(Role role : roleList)
{
roleNames.add(role.getRoleName());
}
ResponseModel responseModel = new ResponseModel();
responseModel.setUserID(user.getID());
responseModel.setUserName(user.getName());
responseModel.setRoleName(roleNames);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.