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

How should I refer to inner enums (defined within an entity) from a JPQL query using Hibernate?

我有一个实体 class 如下:

package stuff;

@Entity
class Thing {

    @Id
    @GeneratedValue 
    private Long id;

    @Basic
    @Enumerated
    private State state;

    public enum State {
        AWESOME,
        LAME
    }
}

我如何使用 JPQL 和 Hibernate select 所有具有 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'

使用以下成语:

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

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

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

select t from Thing t where t.state='AWESOME'