java在JPA查询中包含枚举
我有一节课,形式如下
@Entity
public class Person{
public enum SEX {
MALE, FEMALE, OTHER
}
private String name;
private SEX sex;
}
我有一个接口类,它扩展了JpaRepostory
。枚举在查询中不起作用。我正在尝试使用Spring JPA
获取数据
public interface PersonRepository extends JpaRepository<Person, Long> {
@Query("SELECT p FROM Person p WHERE
"p.SEX = com.example.Person.Sex.MALE " +
"AND p.name = :name")
public List<Person> checkName(@Param("name") String name,);
}
我得到以下例外
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'com.example.Person.Sex.MALE'
我该怎么修
# 1 楼答案
除了前面提到的case错误之外,还有另一个问题:enum类是嵌套类。第三个问题是Hibernate似乎对大写的类名有问题,即需要将类名从
SEX
更改为Sex
备选案文1:
将枚举定义为包
com.example
中的顶级类然后,您可以使用
com.example.Sex.MALE
从存储库中访问枚举值:令人惊讶的是(一只虫子?)如果将枚举的名称从
Sex
更改为SEX
(同时调整查询中的名称),则会出现错误备选案文2:
可以将
Sex
的定义保留为嵌套类。然后将枚举编译成名为Person$Sex.class
的类。只需在查询字符串中使用此名称:然后需要将存储库编写为
同样,如果您将嵌套类fom
Sex
的名称更改为SEX
(也在查询字符串中),则文本会出现异常抛出,尽管生成的字节码存储在类
Person$SEX.class
中# 2 楼答案
你不尊重你的类和属性。应该是的