我有以下场景,在User@Entity中有一个组@Entity的@manytomynet集。我想使用一个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.persistence exception:org.hibernate.exception.sqlgrammareexception:无法提取ResultSet
-
原因:org.postgresql.util.PSQLException:错误:语法错误位于或靠近“.”