首页 > 解决方案 > JPA Criteria API - 多值列

问题描述

说我有many-to-many关系:

@Entity
public class User {
   
...
   @ManyToMany( mappedBy="users")
   public Set<Group> groups = new HashSet<Group>();

   public String name;
...

}

还有一个 Group 类:

public class Group {

    @JoinTable(name="User_Group")
    public Set<User> users = new HashSet<User>();

    public String name;
}

现在,我想选择一个用户及其所有组。理想情况下 - 这将是一个Set<UserDto>地方UserDto

public class UserDto {
    
    public String name;
    
    public Set<String> groupNames; // assuming concatenating all names straight from query isn't trivial
}

我找不到办法做到这一点,据我所知:

        CriteriaBuilder cb = JPA.em().getCriteriaBuilder();
        CriteriaQuery<UserDto> cq = cb.createQuery(UserDto.class);
        Root<UserDto> root = cq.from(User.class);
        SetJoin<User, Group> users = root.join(User_.groups);
        cq.multiselect(root.get(User_.name),  cb.array(users.get(Group_.id)));
        Collection<UserDto> UsersData = new HashSet<>();

并得到multiselect selections cannot contain compound array-valued elements

标签: jpacriteria-api

解决方案


推荐阅读