martes, 27 de octubre de 2009

Uso insert/update de property en Hibernate

Con estos ejercicios se muestra el uso de insert y update del tag property de hibernate que por default el valor de estas propiedades es true y la anotación @Transient para JPA

Veamos el primer caso usando el xml de mapeo de hibernate

<hibernate-mapping>
<class name="org.dracof.hibernate.Persona" table="PERSONA">
<id name="nombre" column="NOMBRE">
<generator class="assigned"/>
</id>
<property name="apellidoP" column="APELLIDOP"/>
<property name="edad" column="EDAD"/>
</class>
</hibernate-mapping>

Si hacemos operaciones de insert de Persona hibernate genera lo siguiente

Hibernate: insert into PERSONA (APELLIDOP, EDAD, NOMBRE) values (?, ?, ?)

o update

Hibernate: update PERSONA set APELLIDOP=?, EDAD=? where NOMBRE=?

Como vemos se toman en cuenta todos los campos del mapeo, para el caso del insert APELLIDOP, EDAD, NOMBRE y para el update APELLIDOP=?, EDAD=?

Si agregamos la propiedad insert="false" o update="false" en el tag property para edad

<property name="edad" column="EDAD" insert="false"/>

<property name="edad" column="EDAD" update="false"/>

O ambos

<property name="edad" column="EDAD" insert="false" update="false"/>

Vemos que el SQL generado ahora es

Para insert

Hibernate: insert into PERSONA (APELLIDOP, NOMBRE) values (?, ?)

Para update

Hibernate: update PERSONA set APELLIDOP=? where NOMBRE=?

Con esto vemos que hibernate ya no toma la propiedad edad para los insert/update.

Podemos tener el mismo resultado usando las anotaciones JPA con @Transient o la palabra reservada transient de java como sigue

 
@Transient
@Column (name="EDAD")
private Integer edad;

o
 
@Column (name="EDAD")
private transient Integer edad;

Y obtenemos el mismo resultado.

Suerte.

1 comentario:

  1. Lucky Club Casino Site | Find your Casino Bonus
    Lucky Club Casino is operated by Gambling Realms Ltd. and operated by the Gambling Realms luckyclub.live Limited, which is owned and operated by Gambling Realms Limited.

    ResponderEliminar