如何使用hibernate本机查询获取实体列表

时间:2014-09-09 03:51:13

标签: hibernate

如何使用hibernate本机查询检索特定实体的列表?

我有一个Cart表包含两列:owner_id和item_id

cart_id | owner_id | item_id
   1    |    1     |    1
   2    |    1     |    2       
   3    |    2     |    1
   4    |    1     |    1

我希望通过onwer_id检索项目组列表:

public List<Item> getCustomerCart1(Customer customer) {
    int owner_id = customer.getId();
    LOGGER.info("Retrieve a cart belong to a customer with id {} " + owner_id);
    StringBuffer hql = new StringBuffer();
    hql.append("select {i.*} from item i inner join cart c ");
    hql.append(" on i.item_id = c.item_id and c.owner_id = :owner_id");
    hql.append(" group by c.owner_id");

    Session session = currentSession();

    SQLQuery query = session.createSQLQuery(hql.toString());
    query.addEntity(Item.class);
    query.setParameter("owner_id", owner_id);

    List<Item> list = query.list();
    System.out.println("list: " + list.size());
    return list;
}

我的堆栈跟踪:

Hibernate: select {i.*} from item i inner join cart c  on i.item_id = c.item_id and c.owner_id = ? group by c.owner_id
WARN | 2014-09-08 20:42:34,928 | SqlExceptionHelper.java | 144 | SQL Error: 0, SQLState: 42601
ERROR | 2014-09-08 20:42:34,929 | SqlExceptionHelper.java | 146 | ERROR: syntax error at or near "{"

我希望获得一个大小为2的列表结果,其中包含item_id 1和item_id 2的信息。任何人都可以帮助我查询。谢谢。

1 个答案:

答案 0 :(得分:0)

使用此查询(仅使用i代替{i.*}):

select i from item i inner join cart c  on i.item_id = c.item_id and c.owner_id = ? group by c.owner_id