我应该如何使用Hibernate从JPQL查询中引用内部枚举(在实体中定义)?

2022-09-03 06:22:07

我有一个实体类,如下所示:

package stuff;

@Entity
class Thing {

    @Id
    @GeneratedValue 
    private Long id;

    @Basic
    @Enumerated
    private State state;

    public enum State {
        AWESOME,
        LAME
    }
}

如何使用JPQL和Hibernate选择状态为AWESOME的所有内容?

select t from Thing t where t.state=stuff.Thing.State.AWESOME

...给出错误...

org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'stuff.Thing.State.AWESOME'

答案 1

使用以下成语:

select t from Thing t where t.state=stuff.Thing$State.AWESOME

Type$InnerType是 Java 对内部类型的命名约定。

当您尝试使用点表示法时,Hibernate 会假定您正在尝试访问嵌套属性,在这种情况下(正确)会失败。


答案 2
select t from Thing t where t.state='AWESOME'