gpt4 book ai didi

java - 参数值元素[...]与预期类型[org.hibernate.type.EnumType]不匹配

转载 作者:行者123 更新时间:2023-12-01 14:07:26 32 4
gpt4 key购买 nike

我生活在一场噩梦中,这是一场依赖噩梦;)

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

我部署它:

  • 在 WebSphere 8(内置于 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-annotations: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 *
  • 作为部署到嵌入式 JBOSS 7 ( 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() ...

非常感谢您的帮助!

最佳答案

这个错误也发生在我身上,使用 Hibernate 5.2.14.Final。事实上,我怀疑这是由于与 Glassfish 4.x 内的一些其他依赖项和附加库的交互造成的。

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

调整后您的映射将与此类似:

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

有关在 JPA 中实现属性转换器的更多信息可以通过以下链接找到:https://www.thoughts-on-java.org/jpa-21-how-to-implement-type-converter/

关于java - 参数值元素[...]与预期类型[org.hibernate.type.EnumType]不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18792304/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com