2

次のコードは、 MySQLでうまく機能します。

しかし、HSQLDBインメモリデータベースを切り替えると(ユニットテスト用)、同じコードが失敗します。

Query query = entityManager.createQuery("SELECT c FROM CartInvoiceEntity c WHERE c.invoiceId = :invoiceId");

query.setParameter("invoiceId", cartInvoiceEntity.getInvoiceId());

次のエラー メッセージが表示されます。

org.hibernate.QueryParameterException: 名前付きパラメーター [invoiceId] が見つかりませんでした

デバッグ時にクエリ オブジェクトを調べたところ、クエリ オブジェクトにパラメータ フィールドがあることがわかりました。MySQL を使用する場合、このパラメータには HashMap に「invoiceId」が含まれます。しかし、HSQLDB に切り替えると、この HashMap は空になります。これが例外がスローされる理由です。問題は、HSQLDB が使用されているときに HashMap が空である理由です。

以下は、関連するMavenの依存関係です

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.1.9.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.1.9.Final</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.16</version>
    </dependency>
    <dependency>
        <groupId>hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <version>1.8.0.10</version>
        <scope>test</scope>
    </dependency>

依存関係の階層から、hibernate-jpa-2.0.api:1.0.1.Final が使用されており、hibernate-core と hibernate-entitymanager の両方の JAR から間接的に参照されていることがわかります。

どんな助けでも大歓迎です!

4

1 に答える 1