【问题标题】:How to get a list to a constructor through jpql query如何通过jpql查询获取构造函数列表
【发布时间】: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 (){ 将默认构造函数添加到您的类中
  • 代码写错了,我忘记把正确的构造函数名了。

标签: java sql hibernate


【解决方案1】:

如果你创建一个带参数的构造函数;您应该明确地为构造函数提供不带参数的;

public FamilyVO (){ }

【讨论】:

猜你喜欢
  • 2018-09-03
  • 2013-11-16
  • 2019-07-26
  • 2018-12-27
  • 2018-07-14
  • 2018-04-07
  • 2019-01-26
  • 1970-01-01
  • 2014-10-26
相关资源
最近更新 更多