我目前正在使用Hibernate学习JPA,也使用maven。
这样我需要在我的orm.xml中使用命名查询,并在update语句的set-clausule中使用输入参数。它给出了一个错误,即参数只能在WHERE或HAVING clausule中使用。
在阅读了几页后,我发现JPA 2.0不支持它,但JPA 2.1确实如此。 See this, bulletpoint 4.6.4
所以我也将我的orm.xml和persistence.xml更改为2.1方案,但它仍然给出了错误。虽然它仍然完美运行,但我讨厌看到错误迹象。
有人知道吗?我正在使用Eclipse Kepler 4.3.2
可以找到orm.xml,persistence.xml,pom.xml和我的项目属性的图片here
答案 0 :(得分:1)
我有同样的问题,代码工作正常,它应该与JPA 2.1(最终版本)
http://download.oracle.com/otn-pub/jcp/persistence-2_1-fr-eval-spec/JavaPersistence.pdf在第4.6.4节(第182页)中找到此文本(我的亮点):
"输入参数只能在查询的WHERE子句或HAVING子句中使用,或者作为update语句的SET子句中的更新项的新值使用。 "
但是eclipse验证仍然将更新查询中的输入参数视为错误... 也许我们应该针对org.eclipse.persistence.jpa.jpql
提出一个错误答案 1 :(得分:0)
以下查询应该有效:
<named-query name = "Artikel.findByWord">
<query>
UPDATE Artikel a
SET a.verkoopprijs = a.verkoopprijs * :percentage
</query>
</named-query>
使用相应的java代码:
em.createNamedQuery("Artikel.findByWord")
.setParameter("percentage", 10)
.executeUpdate();