枚举
public enum CountEnum {
ONE,
TWO
}
实体类
@Entity
public class Test {
...
@Enumerated(EnumType.ORDINAL)
private CountEnum countEnum;
...
}
我想查询所有具有countEnum Test
的{{1}}行。但是由于这里'ONE'
是序数,因此我必须将@Enumerated(EnumType.ORDINAL)
的int值放在'ONE'
中而不是String中。
我的存储库界面,
@Query
但是它抛出一个错误,提示public interface ResourceRepository extends JpaRepository<Test, String> {
@Query(" select test from Test test where test.countEnum = " + CountEnum.ONE.ordinal())
List<Test> find();
}
。那么,由于我不想放置硬编码的常量值,我将如何使用枚举的序数查询所有这些行?
答案 0 :(得分:2)
为什么您认为编写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();
}
答案 1 :(得分:1)
使用常规方法,例如:
public interface ResourceRepository extends JpaRepository<Test, String> {
List<Test> findByCountEnum(CountEnum ce);
}
答案 2 :(得分:1)
将查询定义为字符串常量:
private static final String QUERY_FIND = " select test from Test test where test.countEnum = " + CountEnum.ONE.ordinal();
然后在注释中使用常量:
public interface ResourceRepository extends JpaRepository<Test, String> {
@Query(QUERY_FIND)
List<Test> find();
}
答案 3 :(得分:1)
如果您为枚举分配常量值:
public enum CountEnum {
ONE(Constants.ONE_VALUE), TWO(Constants.TWO_VALUE);
CountEnum(int countEnum) {
}
public static class Constants {
public static final int ONE_VALUE = 0;
public static final int TWO_VALUE = 1;
}
}
然后,您可以在@Query
注释中使用枚举:
public interface ResourceRepository extends JpaRepository<Test, String> {
@Query(" select test from Test test where test.countEnum = " + CountEnum.Constants.ONE_VALUE)
List<Test> find();
}