一个用户有两个角色的输出

Output of one user with two roles

我有两个实体 UserRole。它们具有单向 ManyToMany 连接。但是当调用用户列表时,由于某种原因,用户多次返回多个角色。

下面我提供了代码和结果。

Result

Дебаг

Code with HQL queries

 public List<User> listUsers() {
     List resultList = manager.createQuery("SELECT u FROM User u LEFT JOIN FETCH u.roles").getResultList();
     return resultList;
 }

更新:

我找到了这个解决方案:

public List<User> listUsers() {
    List resultList = manager.createQuery("SELECT u FROM User u LEFT JOIN FETCH u.roles")
            .unwrap(org.hibernate.Query.class).setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
            .getResultList();
    return resultList;
}

但是criteria API比较慢,不推荐使用,已经弃用

如何显示一个用户有两个角色???

需要在查询中添加 distinct 语句以避免出现多个条目

 public List<User> listUsers() {
     List resultList = manager.createQuery("SELECT distinct u FROM User u LEFT JOIN FETCH u.roles").getResultList();
     return resultList;
 }