带输入参数的orm.xml命名查询

时间:2014-04-16 07:53:51

标签: java xml eclipse hibernate jpa

我目前正在使用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

2 个答案:

答案 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();