我有一个父类:
public class User {
Long id;
String name;
@OneToMany(...)
List<Role> roles
...
}
角色类:
public class Role {
Long roleId;
Long roleName;
}
我可以使用user
查询Hibernate Query Language
表格,以获得这样的回复:
public class ResponseModel {
Long userId;
Long userName;
List<String> roleNames;
}
基本上,我想要user
的某些属性,只有roleNames
用户的属性,而不是Role
的所有丰富对象。
答案 0 :(得分:0)
您可以使用join hql和ResultTransformer
<强>已更新强>
下面的示例返回ResponseModel列表,但不完全是您需要的内容。
只是了解如何才能获得必填字段。
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();
答案 1 :(得分:0)
您可以使用条件将值作为用户对象,而不是使用HQL。
Criteria criteria = session.createCriteria(User.class);
criteria.setFetchMode("roles", FetchMode.SELECT);
从条件列表中,您可以获得所需角色的名称。
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);