У меня есть следующий сценарий: набор @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: ОШИБКА: синтаксическая ошибка в или около "."