0

私は悪夢の中で生きています。依存症の悪夢です ;)

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 にデプロイする Arquillian テスト (EAR にシュリンクラップされた JAR としての EJB) として ( jboss.as.jpa.managed=false)。そこではうまくいきません。さまざまな依存関係のセットを試しましたが、これは私が確実に必要としていることがわかっている最小セットです。

    • 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() ...

あなたの助けに感謝します!

4

2 に答える 2

0

私自身の質問に答えます。

要するに、私がやろうとしていたこと:

  • Hibernate 3 でセットアップした WebSphere でアプリケーションを実行します
  • Hibernate 4 に強くバインドされている JBOSS 7 でのアプリケーションのテスト
  • コンテナーに永続性を提供させる
  • 単一の Hibernate (非 JPA) コンストラクト ( UserTypes)を使用する

WebSphere にデプロイする場合UserType、アプリケーションは Hibernate 3 と互換性がある必要があり、JBOSS でテストする場合は、Hibernate 4 と互換性がある必要がありました。結局のところ、UserType仕様は何らかの形で互換性がないほど変更されていました。 . (そうでなかったとしても、これらのバージョンを混在させるのはまだ悪い考えでしたが、明らかになるまでに時間がかかった可能性があります。) この混在により、別の質問で説明されているようなエラーが発生しました。しかし、その質問で受け入れられた解決策でさえ、私はたくさんのエラーがあり、ファンキーな依存関係管理でそれらを回避しましたが、常に何らかの問題を抱えていました。

JPA が (アプリケーションとコンテナー間の) コントラクトである場合、コンテナーがそのコントラクトを実装する方法 (Hibernate など) に依存しないでください。

アプリケーション内から永続性を提供する場合、それはまったく別の話になります。

物事の真っ只中にいると、全体像を見るのが難しい場合があります:)

于 2013-09-20T03:42:43.123 に答える