更新查询而不是选择+保​​存

时间:2012-08-27 12:07:46

标签: java jpa playframework

JPA是否可以使用play框架来执行UPDATE sql查询?

目前,我对实体进行更新的目的是:

  • 通过find()方法或find()方法中的select查询检索实体
  • 更改我想要的值
  • 调用对象上的save()方法

但我猜它会产生2个查询:SELECT和UPDATE。

有没有办法只使用一个查询来完成所有事情?只有UPDATE查询?

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

只要您使用API​​方法,我认为您不会解决您的2个查询问题。实体经理不能只是开始更新实体。它必须首先找到它们,检查它们的状态,然后决定是否真的需要更新,即是否进行了更改。

但是,您可以使用JPQL编写自己的参数化更新语句。您的find()很可能会使用与您实体的主键相匹配的ID或类似内容 您可以将id传递给语句并直接更新。我只会这样做,如果id不是来自用户输入,而是来自之前的选择。换句话说,保证是现有的实体和你真正想要的实体。

查询可能如下所示:

UPDATE MyTable SET MyValue = :newValue WHERE MyId = :id 

将newValue和id作为参数传递的位置。

但是,我宁愿让实体经理完成所有工作。为什么你想在一个声明中做到这一点?除非您正在进行大量操作,否则速度不应成为问题,因为这些简短且具体的陈述通常非常快。