Как создать проекцию JPA с атрибутом отношения ManyToMany с помощью запроса критериев? - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть следующий сценарий: набор @ManyToMany группы @Entity в пользовательском @Entity. Я хочу вернуть проекцию, используя класс DTO с некоторыми свойствами пользователя и набором.

@Entity
public class User {
    private String email;
    private String password;

    @JoinTable(name = "users_groups", joinColumns = {
        @JoinColumn(name = "user_pk")}, inverseJoinColumns = {
        @JoinColumn(name = "group_pk")})
   @ManyToMany(fetch = FetchType.EAGER)
   private Set<Permission> permissions;
}

@Entity
public class Group {
    private String description;
}


public class DTO {
    private String email;
    private Set<Group> groups;

    public DTO(String email, Set<Group> groups) {        
        this.email = email;
        this.groups = groups;
    }
}

Это моя неудачная попытка создать проекцию с критериями jpa для моего класса dto.

public DTO findByEmail(String email) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<DTO> cq = cb.createQuery(DTO.class);
    Root<User> root = criteriaQuery.from(User.class);
    Join<User, Group> groups = root.join("groups");
    criteriaQuery.where(cb.equal(root.get("email"), email));
    cq.select(cb.construct(DTO.class, root.get("email"), root.get("groups")));

    return em.createQuery(cq).getSingleResult();
}

Я получаю следующие ошибки:

  • Причина: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: не удалось извлечь ResultSet
  • Вызвано: org.postgresql.util.PSQLException: ОШИБКА: синтаксическая ошибка в или около "."
...