Java:拥有@Enumerated(字符串),但仍然获得ClassCastException
我有一个带有枚举字段的实体:Java:拥有@Enumerated(字符串),但仍然获得ClassCastException,java,enums,entity,classcastexception,Java,Enums,Entity,Classcastexception,我有一个带有枚举字段的实体: @Entity @NamedQueries({ @NamedQuery( name = "MyEntity.findEnum", query = "SELECT myEntity FROM MyEntity myEntity WHERE myEntity.myEnum = 'A'" ) }) public class MyEntity { //... @Enumerated(STRING) pr
@Entity
@NamedQueries({
@NamedQuery(
name = "MyEntity.findEnum",
query = "SELECT myEntity FROM MyEntity myEntity WHERE myEntity.myEnum = 'A'"
)
})
public class MyEntity {
//...
@Enumerated(STRING)
private MyEnum myEnum;
//...
}
枚举非常简单:
public enum MyEnum {
A, B;
}
在我的主要课程中,我有以下主要功能:
public static void main(String[] args) {
/...
MyEntity myEntity = new MyEntity();
myEntity.setMyEnum(MyEnum.A);
tx.begin();
em.persist(myEntity);
tx.commit();
TypedQuery<MyEntity> myEnumEntitiesQuery =
em.createNamedQuery("MyEntity.findEnum", MyEntity.class);
List<MyEntity> myEntities = myEnumEntitiesQuery.getResultList();
}
问题是您使用以下声明定义了
@Enumerated(STRING)
private MyEnum myEnum
字段的类型为MyEnum
。但是您正在向查询传递一个字符串值。因此,您必须执行以下操作(可能还有其他操作,但我只知道以下内容):
@NamedQuery(
name = "MyEntity.findEnum",
query = "SELECT me FROM MyEntity me WHERE me.myEnum = :myEnumValue"
)TypedQuery
的实例,并在此实例上设置命名参数,如下所示:
TypedQuery<MyEntity> myEnumEntitiesQuery =
em.createNamedQuery("MyEntity.findEnum", MyEntity.class);
myEnumEntitiesQuery.setParameter("myEnumValue", MyEnum.A);
List<MyEntity> myEntities = myEnumEntitiesQuery.getResultList();
TypedQuery myEnumEntitiesQuery=
em.createNamedQuery(“MyEntity.findEnum”,MyEntity.class);
setParameter(“myEnumValue”,MyEnum.A);
List myEntities=myEnumEntitiesQuery.getResultList();
非常感谢。我只是在学习这些东西,我以前看过这段代码,但不记得了,它工作得非常完美!另见
TypedQuery<MyEntity> myEnumEntitiesQuery =
em.createNamedQuery("MyEntity.findEnum", MyEntity.class);
myEnumEntitiesQuery.setParameter("myEnumValue", MyEnum.A);
List<MyEntity> myEntities = myEnumEntitiesQuery.getResultList();