Actualizacion Dinamica Con Hibernate

De Dos Ideas.
Revisión del 12:47 7 sep 2011 de Fguerra (discusión | contribuciones) (Deshecha la edición 6262 de 203.229.219.153 (disc.))
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Hibernate, al iniciar, lee el archivo de configuracion hibernate.cfg.xml. De manera predeterminada se generan y se levantan a memoria todas las sentencias de select, insert, update, delete de cada clase.

Estas sentencias son las básicas por ID.

Con respecto a los UPDATE esto presenta el inconveniente que ante un update de un solo campo del objeto, hibernate me genera el update de todos los campos del objeto.

Para las bases de datos esto es poco beneficioso ya que estamos generando mas undo (guardar en el rollback el valor anterior de los campos) del necesario.

Y pensemos lo malo que puede ser este comportamiento si ademas por el update de alguno de los campos, en la base de datos se dispara un trigger, independientemente si el valor es distinto o no.

Estaríamos generando no solo undo innecesariamente, sino que tambien estaríamos aumentando el procesamiento.

Para evitar esto Hibernate permite configurar la clase como dynamic-update

Dynamic-Update en archivo XML

<class name="Message" table="MESSAGES" dynamic-update="true">
   ...
</class>

Dynamic-Update con anotaciones

@Entity
@org.hibernate.annotations.Entity(dynamicUpdate = true)
@Table(name="MESSAGES")
@SequenceGenerator(name="seq", sequenceName = "MESSAGES_SEQ", allocationSize=1)
public class Message {
  ...
}

En estas anotaciones vemos que además de usar las anotaciones estandar de JPA, estamos usando extensiones propias de Hibernate. Es el caso de la annotation Entity.

Utilizar la Entity de Hibernate no nos libra de tener que utilizar la anotación estandar Entity, ya que cada tiene funcionalidad diferente. La de Hibernate no incluye el significado de la estandar, solo la extiende.

Las annotations standard estan en la libreria ejb3-persistence.jar y para usarlas debemos importar el package javax.persistence.*

Para el caso de las anotaciones propias de Hibernate se recomienda no importar el package y escribirlas completas para diferenciarlas de las estandar.

Ver también