【发布时间】:2017-03-21 13:59:56
【问题描述】:
我需要通过 JPQL 查询将列表传递给 VO(值对象)。 例如:
我的 VO 课:
public class FamilyVO {
private String lastName;
private List<Name> names;
public FamilyVO () {
}
public FamilyVO (List<Name> names, String lastName) {
this.names = names;
this.lastName = lastName;
}
}
我的查询使用new 运算符:
public class FamilyRepositoryBean {
@Override
public List<FamilyVO> findFamilies(Long id) {
StringBuilder jpql = new StringBuilder("SELECT new "+ FamilyVO.class.getName());
jpql.append("(f.names, f.lastName)");
jpql.append(" FROM Family f ");
jpql.append(" WHERE f.id = :pId");
Query query = em.createQuery(jpql.toString());
query.setParameter("pId", id);
return query.getResultList();
}
}
我的实体家庭:
@Entity
public class Family {
@OneToMany(mappedBy = "family")
protected List<Name> names = new ArrayList<Name>();
private String lastName;
public Family() {
}
public List<Name> getNames(){
return names;
}
public String getLastName() {
return lastName;
}
}
我的实体名称:
@Entity
public class Name {
@NotNull
@ManyToOne(fetch = FetchType.LAZY, optional = false)
private Family family;
public Name() {
}
public Family getFamily(){
return family;
}
}
当我运行这个查询时,出现以下错误:
EJB 调用时出现 RuntimeException java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: 无法在类上找到适当的构造函数
【问题讨论】:
-
嗨!你也可以显示
Family代码吗? -
像这样 FamilyVO (){ 将默认构造函数添加到您的类中
-
代码写错了,我忘记把正确的构造函数名了。