以下代码适用于MySQL。
但是在切换HSQLDB 内存数据库(用于单元测试)时,相同的代码会失败,
查询 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 中间接引用的。
非常感谢任何帮助!