java - ¿Cómo actualizo un cierto campo de un Modelo en Playframework?
playframework-1.x (3)
Esto depende de si Play (o en realidad Avaje Ebean) realmente rastrea cuáles de los campos se cambian. Es más simple actualizar todos los campos en su lugar.
Esto tampoco es un problema para el rendimiento, así que no perdería demasiado tiempo buscando una solución.
Supongamos que tenemos una clase de Usuario, si quiero actualizar su nombre:
Usuario user = User.findById (123); user.name = "alguien"; user.save ();
El SQL generado sería
update user as user0 set user0.name = ? user0.email = ? .....
Eso significa que Play
no se dio cuenta de que solo quiero actualizar un solo campo. ¿Hay alguna manera de que el SQL generado solo actualice los campos especificados?
Puede usar la función de actualización dinámica de hibernate: http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/
Pero recuerde que esto tiene un impacto negativo en el rendimiento ya que la base de datos no puede almacenar en caché las declaraciones. Vea aquí para otras explicaciones: Hibernate: dynamic-update dynamic-insert - Performance Effects
Información: ¡esta es la respuesta para Play 2 + Ebean! por lo que NO funciona con Play 1 + JPA
Hay algunas opciones en la API de Ebean , por lo que debe verificarlo y elegir uno:
-
Update<T>
- verificar en la muestra la anotación@NamedUpdates
-
Ebean.createUpdate(beanType, updStatement)
-
SqlUpdate
: solo puede realizar una actualización de SQL sinSqlUpdate
, sin necesidad de dar el tipo de entidad