假设我们有一个User类,如果我想更新它的名字:
User user = User.findById(123); user.name =“某人”; user.save();
生成的SQL将是
update user as user0 set user0.name = ? user0.email = ? .....
这意味着Play
没有意识到我只想更新单个字段。有没有办法可以使生成的SQL只更新指定的字段?
答案 0 :(得分:1)
信息:这是Play 2 + Ebean的答案!所以它不适用于Play 1 + JPA
Ebean's API中有一些选项,因此您应该检查并选择一个:
Update<T>
- 检查示例中@NamedUpdates
注释Ebean.createUpdate(beanType, updStatement)
SqlUpdate
- 您只需执行原始SQL更新,而无需提供实体类型答案 1 :(得分:0)
这取决于Play(或实际上是Avaje Ebean)是否实际跟踪哪些字段已更改。更新所有字段更简单。
这也不是性能方面的问题,因此我不会浪费太多时间寻找解决方案。
答案 2 :(得分:0)
您可以使用hibernate的动态更新功能:http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/
但请记住,这会对性能产生负面影响,因为数据库无法缓存语句。有关其他说明,请参阅此处:Hibernate : dynamic-update dynamic-insert - Performance Effects