Har*_*lli 5 hibernate hibernate-mapping java-8 jpa-2.2
我们正在从 Hibernate 3 迁移到 Hibernate 5.3,我们在 HQL 中使用了位置参数,我看到一些关于 Hibernate 支持的帖子说 Hibernate 5 不再支持位置参数。应该用命名参数替换?
有人可以证实这一点吗?
如果可能,请让我知道 Hibernate 3 已弃用哪些内容?
提前致谢。
已删除对 HQL/JPQL 查询中旧式查询参数(“?”)声明的支持。该功能自 Hibernate 4.1 起已被弃用,并最终在 5.3 版本中删除。
因此,以下查询声明无效:
Query<Product> query = OBDal.getInstance().getSession()
.createQuery("from Product as p where p.name = ? and p.stocked = ?", Product.class);
query.setParameter(0, "Ale Beer");
query.setParameter(1, true);
Run Code Online (Sandbox Code Playgroud)
请注意,虽然前面的代码编译成功,但在运行时会失败。为了使前面的查询正常工作,它必须使用命名参数:
Query<Product> query = OBDal.getInstance().getSession()
.createQuery("from Product as p where p.name = :name and p.stocked = :isStocked", Product.class);
query.setParameter("name", "Ale Beer");
query.setParameter("isStocked", true);
Run Code Online (Sandbox Code Playgroud)
如果使用 OBQuery,建议不要使用位置参数:
OBQuery<Product> obQuery = OBDal.getInstance().createQuery(Product.class,
"as p where p.name = ? and p.stocked = ?");
List<Object> parameters = new ArrayList<>(2);
parameters.add("Ale Beer");
parameters.add(true);
obQuery.setParameters(parameters);
Run Code Online (Sandbox Code Playgroud)
请注意,由于将位置参数转换为命名参数的内部机制,前面的查询不会失败。无论如何,建议改用命名参数,因此自 3.0PR18Q3 版本起不推荐使用 OBQuery.setParameters() 方法。
OBQuery 提供 setNamedParameters 方法来提供包含命名参数及其各自值的映射:
OBQuery<Product> obQuery = OBDal.getInstance().createQuery(Product.class,
"as p where p.name = :name and p.stocked = :isStocked");
Map<String, Object> parameters = new HashMap<>(2);
parameters.put("name", "Ale Beer");
parameters.put("isStocked", true);
obQuery.setNamedParameters(parameters);
Run Code Online (Sandbox Code Playgroud)
或者:
OBQuery<Product> obQuery = OBDal.getInstance().createQuery(Product.class,
"as p where p.name = :name and p.stocked = :isStocked");
obQuery.setNamedParameter("name", "Ale Beer");
obQuery.setNamedParameter("isStocked", true);
Run Code Online (Sandbox Code Playgroud)
有关迁移到 Hibernate 5.3 的更多帮助:http://wiki.openbravo.com/wiki/Hibernate_5.3_Migration_Guide
| 归档时间: |
|
| 查看次数: |
2617 次 |
| 最近记录: |