2014-03-05 10 views
1

當我嘗試做下一個HQL查詢,我得到一個錯誤:QuerySyntaxException定位適當的構造在Hibernate中

org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [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(); 
} 

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; 
    } 

} 

回答

5

當使用聚合函數count時,返回值爲Long。這就是爲什麼適用的構造是:

public CountItemLike(int itemId, Long likes){ 
     this.itemId = itemId; 
     this.likes = likes.intValue();   
    } 

或:

public CountItemLike(int itemId, long likes){ 
     this.itemId = itemId; 
     this.likes = (int) likes;   
    } 

也許有另外類型ItemLike.itemId和int之間的不匹配,但不能從給定的代碼所示。

相關問題