简体   繁体   English

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

[英]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某些属性,而只需要userroleNames ,而不是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM