【发布时间】:2013-09-18 11:52:38
【问题描述】:
我生活在噩梦中,这是一个依赖的噩梦;)
我正在测试一个使用 Hibernate 3 的 EJB 应用程序。
我要么部署它:
-
在 WebSphere 8(EAR 中内置的 EJB JAR)上,这是我想要的目标环境。 它在那里工作得很好。根据我们组织的标准,(Hibernate)依赖项是通过一个单独的过程来处理的。看来我在那里得到了以下 Hibernate 依赖项:
org.hibernate:hibernate-validator:3.1.0.gaorg.hibernate:hibernate-search:3.1.1.gaorg.hibernate:hibernate-entitymanager:3.4.0.gaorg.hibernate:hibernate-commons-annotations:3.1.0.gaorg.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.GAorg.hibernate:hibernate-annotations:jar:3.4.0.GAorg.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() ...
非常感谢您的帮助!
【问题讨论】:
-
老实说,我认为您需要在这里重新考虑使用 JBoss AS 7 来运行您的集成测试。如果您的生产环境是 WebSphere 8,那么您应该尝试在您的集成测试环境中使用它。在 AS7 上运行它不会给您的测试套件带来很大的信心,因为整个堆栈在运行时的行为不同。我建议使用 Arquillian WebSphere container adapter。 AFAIK,您需要从源代码构建此适配器(应该很容易,因为您可能可以访问这些库)。
标签: java hibernate maven jpa jboss-arquillian