次のコードは、 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 から間接的に参照されていることがわかります。
どんな助けでも大歓迎です!