有没有办法在 JPA 存储库中的 @Query 注释中使用常量(EnumType Ordinal)值?

Chi*_*jee 5 java hibernate jpa spring-data-jpa spring-boot

枚举,

public enum CountEnum {
   ONE,
   TWO
}
Run Code Online (Sandbox Code Playgroud)

实体类,

@Entity
public class Test {
...
    @Enumerated(EnumType.ORDINAL)
    private CountEnum countEnum;
...
}
Run Code Online (Sandbox Code Playgroud)

我想查询所有Test具有 countEnum 的行 'ONE'。但由于这里@Enumerated(EnumType.ORDINAL)是序数,我必须输入 int 值'ONE'@Query不是 String。

我的存储库界面,

public interface ResourceRepository extends JpaRepository<Test, String> {
    @Query(" select test from Test test where test.countEnum = " + CountEnum.ONE.ordinal())
    List<Test> find();
}
Run Code Online (Sandbox Code Playgroud)

但它会抛出一个错误说 Attribute value must be constant. 那么,由于我不想放置硬编码的常量值,因此如何使用枚举的序数值查询所有这些行?

Jen*_*der 5

为什么你认为在编写 JPQL 时必须使用序数值?

JPA 规范指出:

4.6.1 文字

[...] 枚举文字支持使用 Java 枚举文字语法。必须指定完全限定的枚举类名。

因此,我希望像下面这样的东西能够工作:

public interface ResourceRepository extends JpaRepository<Test, String> {
    @Query(" select test from Test test where test.countEnum = com.somepackage.with.sub.pakcages.CountEnum.ONE")
    List<Test> find();
}
Run Code Online (Sandbox Code Playgroud)

  • 对我来说不起作用,尽管它看起来完全有效并且是我最初尝试的方法。获取`org.hibernate.hql.internal.ast.QuerySyntaxException:无效路径:'com.example.Class.Enum'`。也许是由内部枚举引起的? (3认同)