簡體   English   中英

如何通過jpql查詢獲取構造函數的列表

[英]How to get a list to a constructor through jpql query

我需要通過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調用java.lang.IllegalArgumentException上的RuntimeException:org.hibernate.hql.ast.QuerySyntaxException:無法在類上找到合適的構造函數

如果你創建一個帶參數的構造函數; 你應該為構造函數提供沒有參數,明確的;

public FamilyVO (){ }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM