【问题标题】:Hibernate IllegalArgumenetException on enum column枚举列上的休眠 IllegalArgumenetException
【发布时间】:2014-09-17 18:47:45
【问题描述】:

在我的项目表中,我有一个枚举列来描述该项目的状态:

@Enumerated(EnumType.STRING)
@Column(name="status")
private ItemStatus status;

然后,当我将商品添加到购物车时,我想使用此查询列出购物车中的所有商品:

select i.* from item as i inner joint cart as c on i.item_id = c.item_id
where c.owner_id=:owner_id group by i.item_id

上面的结果如我所料返回。但是,我还想获得有关该项目所有者的更多详细信息,因此我将查询更改为:

select i.*, u.* from item as i inner join cart as c on i.item_id = c.item_id
inner join customer as u on i.owner_id = u.customer_id
where c.owner_id = :owner_id group by i.item_id, u.customer_id

SQLQuery query = session.createSQLQuery(queryname);
List<Object[]> result = query.addEntity(Item.class)
                                .addEntity(Customer.class)
                                .setParameter("owner_id", owner_id)
                                .list();

通过第二个查询,我在状态列上得到了枚举类的未知名称值。我想知道为什么第一个查询但第二个查询有异常。在休眠中获取枚举列的正确方法是什么?

这是我的枚举类

public enum ItemStatus {
ACTIVE, UNAVAILABLE;
}

【问题讨论】:

    标签: sql hibernate enums


    【解决方案1】:

    你不应该也添加购物车实体吗?

    List<Object[]> result = query.addEntity(Item.class)
                                  .addEntity(Cart.class)
                                    .addEntity(Customer.class)
                                    .setParameter("owner_id", owner_id)
                                    .list();
    

    【讨论】:

    • 我只想获取该商品的商品信息和所有者信息,为什么我需要添加购物车实体?我尝试在 pgAdmin 上运行第二个查询,结果如我所料。所以我认为我错误地应用了休眠 SQLquery
    猜你喜欢
    • 1970-01-01
    • 2017-11-16
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 2012-01-17
    相关资源
    最近更新 更多