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