fan*_*fan 6 java sql parameters hibernate jpa
我正在将一个项目从Hibernate 4.2.6迁移到5.2.0。
我注意到,对于Hibernate 5.2.0,本机查询现在需要从零开始的参数定位。
3.10.13位置参数
本机查询只能使用位置参数绑定和对结果项的位置访问,但已定义命名参数的存储过程查询除外。绑定位置参数的值时,编号从“ 1”开始。假设对于本机查询,参数本身使用SQL语法(即“?”而不是“?1”)。
我对规范的理解是,即使是本机查询,编号也应从1开始。
现在根据Hibernate文档Query.setParameter(int,Object)。该位置从0开始编号。在Hibernate 4.2和5.2的文档中。
我做了一个微测试
@PersistenceContext
private EntityManager entityManager;
Query query = entityManager.createNativeQuery("select * from Game g where title = ?");
query.setParameter(1, GAME_TITLES[0]);
List list = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
这适用于休眠4.2.6。
persistence.xml文件如下所示
<persistence-unit name="test" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/arquillian</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)
Query query = entityManager.createNativeQuery("select * from Game g where title = ?");
query.setParameter(0, GAME_TITLES[0]);
List list = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
唯一的区别是setParameter中的0索引。
persistence.xml也非常相似
<persistence-unit name="test">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>jdbc/arquillian</jta-data-source>
<properties>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform" />
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)
我在两个版本中都跟踪了代码。我可以在4.2.6中找到处理基于1的索引的位置。我在5.2版中找不到类似的代码。
我在休眠论坛中找到了一篇可以追溯到2009年的帖子:
好吧,仅当使用JPA-Query-Api时,第一个参数的索引必须为1。使用Hibernate-Query-Api时,第一个参数的索引必须为0。
很明显,我正在使用JPA。所以问题是:
有没有一种方法可以配置Hibernate 5.2以获取基于1的位置参数?我不愿更改代码以不符合规范。
Hibernate 5.2 已将该hibernate-entitymanager模块合并到 中hibernate-core,因此此过程中可能会出现此问题。
由于 Hibernate 5.2.1修复了此问题,因此您只需升级到 5.2.1 或更高版本即可。
| 归档时间: |
|
| 查看次数: |
2754 次 |
| 最近记录: |