QuerySyntaxException在Hibernate中定位适当的构造函数

Dan*_*ani 2 hibernate jpql

当我尝试进行下一个HQL查询时,我得到下一个错误:

org.hibernate.hql.internal.ast.QuerySyntaxException:无法在类[package.CountItemLike]上找到合适的构造函数[SELECT new package.CountItemLike(ll.itemId,COUNT(ll.itemId))FROM package.ItemLike AS ll GROUP BY ll.itemId]

在我的DAO课程中

@Override
public List<CountItemLike> countItemLikes() {

    String hql = "SELECT NEW package.CountItemLike"
            + "(ll.itemId, COUNT(ll.itemId)) "
            + "FROM ItemLike AS ll "
            + "GROUP BY ll.itemId";

    Query query = this.getCurrentSession().createQuery(hql); // ERROR IS HERE

    return (List<CountItemLike>) query.list();
}
Run Code Online (Sandbox Code Playgroud)

POJO

public class CountItemLike {

    private int itemId;
    private int likes;

    public CountItemLike(int itemId, int likes){

        this.itemId = itemId;
        this.likes = likes;        
    }

    public int getItemId() {
        return itemId;
    }

        public int getLikes() {
        return likes;
    }   

}
Run Code Online (Sandbox Code Playgroud)

Mik*_*unu 7

count使用聚合函数时,返回值为Long .这就是为什么适用的构造函数是:

  public CountItemLike(int itemId, Long likes){
        this.itemId = itemId;
        this.likes = likes.intValue();        
  }
Run Code Online (Sandbox Code Playgroud)

要么:

  public CountItemLike(int itemId, long likes){
        this.itemId = itemId;
        this.likes = (int) likes;        
  }
Run Code Online (Sandbox Code Playgroud)

也许ItemLike.itemId之间还存在类型不匹配int,但是从给定的代码中看不到.