如何在 Playframework 中更新模型的某个字段?
Posted
技术标签:
【中文标题】如何在 Playframework 中更新模型的某个字段?【英文标题】:How do I update a certain field of a Model in Playframework? 【发布时间】:2013-07-03 03:52:36 【问题描述】:假设我们有一个 User 类,如果我想更新它的名字:
用户用户 = User.findById(123); user.name = "某人"; user.save();
生成的 SQL 将是
update user as user0 set user0.name = ? user0.email = ? .....
这意味着Play
没有意识到我只想更新一个字段。有什么办法可以让生成的 SQL 只更新指定的字段?
【问题讨论】:
使用正确的 Play 版本和使用的 ORM 标记您的问题 下次在开始时准确地写下您正在使用的版本!目前 Play 的稳定版本是 ver。 2+ 因此,如果未指定其他版本,我们假设您在其上下文中询问。 【参考方案1】:信息:这是 Play 2 + Ebean 的答案!所以它不适用于 Play 1 + JPA
Ebean's API中有一些选项,你应该检查并选择一个:
Update<T>
- 签入示例中的 @NamedUpdates
注释
Ebean.createUpdate(beanType, updStatement)
SqlUpdate
- 您可以只执行原始 SQL 更新,而无需提供实体类型
【讨论】:
猜错了,好像是Play 1。;) 是的,他在我回答后添加了那个标签,运气不好:D【参考方案2】:这取决于 Play(或实际上是 Avaje Ebean)是否实际跟踪更改了哪些字段。相反,更新所有字段更简单。
这也不是性能方面的问题,所以我不会浪费太多时间寻找解决方案。
【讨论】:
【参考方案3】:您可以使用hibernate的动态更新功能:http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/
但请记住,这会对性能产生负面影响,因为数据库无法缓存语句。其他解释见这里:Hibernate : dynamic-update dynamic-insert - Performance Effects
【讨论】:
以上是关于如何在 Playframework 中更新模型的某个字段?的主要内容,如果未能解决你的问题,请参考以下文章
Playframework:是不是可以在模板中将参数传递给模型的 getter?
Play Framework:如何在 CRUD 模型中声明不应在 UI 中显示的成员
如何使用 Playframework 呈现特殊的 XML/JSON 风格
在 Play Framework 1.x 中保存模型之前执行一个方法
playframework org.hibernate.PersistentObjectException:分离的实体传递给坚持:模型