当前位置: 首页 > 知识库问答 >
问题:

参数值元素[…]与预期的类型[org.hibernate.type.enumType]不匹配

毛勇
2023-03-14

我生活在一个噩梦中,而且是一个依赖的噩梦;)

我正在测试一个使用Hibernate3的EJB应用程序。

>

  • 在WebSphere8上(EAR中内置的EJB JAR),这是我想要的目标环境。在那里很好用。按照我们组织的标准,(Hibernate)依赖关系是通过一个单独的过程来处理的。我似乎在那里获得了以下Hibernate依赖项:

    • org.hibernate:hibernate-validator:3.1.0.ga
    • org.hibernate:hibernate-search:3.1.1.ga
    • org.hibernate:hibernate-entitymanager:3.4.0.ga
    • org.hibernate:hibernate-commons-annotations:3.1.0.ga
    • org.hibernate:hibernate-注释:3.4.0.ga
    • org.hibernate:hibernate-c3p0:3.3.2.ga*
    • org.hibernate:hibernate-core:3.3.2.ga*
    • org.hibernate:hibernate-ehcache:3.3.2.ga*
    • org.hibernate:hibernate-jbosscache:3.3.2.ga*
    • org.hibernate:hibernate-jbosscache2:3.3.2.ga*
    • org.hibernate:hibernate-jmx:3.3.2.ga*
    • org.hibernate:hibernate-oscache:3.3.2.ga*
    • org.hibernate:hibernate-proxool:3.3.2.ga*
    • org.hibernate:hibernate-swarmcache:3.3.2.ga*

    作为部署到嵌入式JBoss7(JBOSS.As.jpa.managed=false)的Arquillian测试(EJB是一个收缩在EAR中的JAR)。它在那里行不通。我尝试过各种依赖项集,但这是我确定需要的最小集:

    • org.hibernate:ejb3-persistence:jar:1.0.2.ga
    • org.hibernate:hibernate-annotations:jar:3.4.0.ga
    • org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.final
    • org.hibernate:hibernate-c3p0:3.3.2.ga*
    • org.hibernate:hibernate-core:3.3.2.ga*
    • org.hibernate:hibernate-ehcache:3.3.2.ga*
    • org.hibernate:hibernate-jbosscache:3.3.2.ga*
    • org.hibernate:hibernate-jbosscache2:3.3.2.ga*
    • org.hibernate:hibernate-jmx:3.3.2.ga*
    • org.hibernate:hibernate-oscache:3.3.2.ga*
    • org.hibernate:hibernate-proxool:3.3.2.ga*
    • org.hibernate:hibernate-swarmcache:3.3.2.ga*

    这是我得到的错误:

    java.lang.IllegalArgumentException: Parameter value element [INCLUDED] did not match expected type [org.hibernate.type.EnumType]
        at org.hibernate.ejb.AbstractQueryImpl.validateCollectionValuedParameterMultiBinding(AbstractQueryImpl.java:385)
        at org.hibernate.ejb.AbstractQueryImpl.validateParameterBinding(AbstractQueryImpl.java:363)
        at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:343)
        at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:370)
        at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:67)
        ...
    

    这是我正在执行的代码:

    MyStatusEnum[] statuses = ...;
    String queryString = "from MyEntity where statusCode in (:statuses)";
    Query query = getEntityManager().createQuery(queryString);
    query.setParameter("statuses", Arrays.asList(statuses));
    

    “实体”字段如下所示:

    @Column(name="STATUS_CD", nullable=false)
    @Enumerated(EnumType.STRING)
    public MyStatusEnum getStatusCode() ...
    

    非常感谢您的帮助!

  • 共有1个答案

    段宏毅
    2023-03-14

    使用Hibernate 5.2.14.final时,我也遇到了这个错误。实际上,我怀疑这是由于与GlassFish4.x中的其他依赖项进行了交互,并使用了其他库。

    我实现了一个绕过错误的解决方案,用属性转换器(实现javax.persistence.AttributeConverter)替换@Enumerated(EnumType.String)。

    调整后的映射将与以下类似:

    @Column(name="STATUS_CD", nullable=false)
    @Convert(converter = MyStatusEnumConverter.class)
    public MyStatusEnum getStatusCode() ...
    

    有关在JPA中实现属性转换器的更多信息,请访问以下链接:https://www.coughts-on-java.org/jpa-21-how-to-implement-type-converter/

     类似资料:
    • 我生活在一场噩梦中,这是一场依赖性的噩梦;) 我正在测试一个使用Hibernate3的EJB应用程序。 我可以部署它: > 作为部署到嵌入式JBOSS 7()的Arquillian测试(EJB作为封装在EAR中的JAR)。它在那里不起作用。我尝试过各种依赖项集,但这是我确定需要的最小依赖项集:

    • 我正在尝试使用Spring数据执行一个IN查询。我的模型如下所示: 我的仓库界面是这样的: } 问题是当我尝试执行此代码

    • 我已经回答了这个问题,但没有得到任何反馈。因此,我将尝试提出不同的问题。我想对我的搜索请求使用规范。但似乎无法访问规范或其他内容,因为它告诉我: 这个:带有@...似乎不对。 我只是试着遵循这个Spring官方教程:https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/ 或者来自

    • 我使用的是JPA2.0,在DAO层中有以下代码: 注意:这是从泛型例程中提取和简化的代码,我不能将“Object ValueArr”更改为String[],因为它被用于其他...

    • 何时调用Spring数据JPA方法将引发如下所示的异常 原因:java.lang.IllegalArgumentException:参数值元素[ApplicationMaterial(ID=1,Name=SDFSF,FileFormat=Doc,Description=DFSDFDS,TemplateFileURL=FSDFSDF,CreateDat=2018-09-26 16:54:09.297

    • 它打印出值的等效,这是因为这一行: 通过调用表示。 那么,如何使Hibernate相信是的实例? 我的枚举是由加载的。而由URLClassLoader加载,由另一个类加载器加载。