Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:拥有@Enumerated(字符串),但仍然获得ClassCastException_Java_Enums_Entity_Classcastexception - Fatal编程技术网

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();