如何在hibernate中将所有子实体的特定属性作为列表获取?

时间:2017-05-19 11:46:15

标签: java hibernate

我有一个父类:

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的所有丰富对象。

2 个答案:

答案 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);