Consulta @Version y @Basic - JPA

137 views
Skip to first unread message

Leandro Spadaro

unread,
Dec 19, 2008, 10:50:21 AM12/19/08
to (Grupo Java Google) Lista, Grupo Java BS AS, Grupo Java Diesil
Buenas a todos...
 
y antes que nada..gracias por responder las consultas que realizo.
 
La consulta que les traigo en este momento es sobre la anotación @Version que se utiliza en JPA, alguien me podria decir bien
como funciona, que sentido tiene utilizarla y en que caso debería utilizarla.
Esto se los consulto por que no comprendo muy bien su existencia dentro de la especificación JSR220. 
 
Además quería consultarles sobre @Basic, entiendo que muchos de los motores de persistencia tiene por defecto configurado
la carga temprana, por eso se puede utilizar esta anotación para que realizar carga tardía  @Basic(fetch=LAZY), Por lo que dice la especificacion
para tipo de datos primitivos, envoltorios y enumeraciones por defecto deberian hacer carga temprana los motores de persistencia.
Mi duda es la siguiente, en varios ejemplos figura @Basic (solo sin parametros) sin que se le pase parametros, esto por que se raliza de esta forma?
Lo que supongo es que debe responder con carga temprana, pero la verdad no lo se.
 
 
saludos
Leandro


¡Disfrutá del nuevo Hotmail! Decile chau al spam

Santiago Risaro

unread,
Dec 19, 2008, 11:32:54 AM12/19/08
to jav...@googlegroups.com
@Version sirve para verificar si hubo una modificación concurrente de un registro.
 
Cada vez que hacés un update de un registro con @version se actualiza el número de versión, y al momento de hacer un update java comprueba que el número en la base sea igual al número en el objeto que pasaste para hacer el update, si no son iguales no te deja modificar los datos.
 
Con un ejemplo por ahi se entiende mejor:
 
Supongamos una tabla de clientes y dos usuarios A y B.
 
A pide los datos de un cliente para modificarlos, recibe todos los datos y el número de versión, digamos 1.
Mientras A modifica los datos B los pide también, con versión 1, porque A todavía no lo guardó.
B es más rápido que A y guarda antes de que A termine, en ese caso se incrementa la versión, a 2.
Cuando A va a guardar se comparan las versiones, la del objeto cliente de A con la de la BB. DD., como en la base es mayor se lanza una excepción (OptimisticLockException si no me equivoco) y no se actualizan los datos.
 
@Basic te la debo, nunca la usé.
 
Espero que se haya entendido.
 
Saludos.

2008/12/19 Leandro Spadaro <leo_s...@hotmail.com>

Santiago Risaro

unread,
Dec 20, 2008, 12:17:13 AM12/20/08
to jav...@googlegroups.com
Estuve leyendo un poco sobre la anotación basic, y en la referencia de Hibernate annotations dice lo siguiente:

Not having an annotation for your property is equivalent to the appropriate @Basic annotation. The @Basic annotation allows you to declare the fetching strategy for a property:

O sea que tener un campo como @Basic o tenerlo sin anotación es exáctamente lo mismo. La única utilidad que le encontré es, como vos dijiste, cambiar el fetching, que por default es EAGER.

Saludos.

2008/12/19 Santiago Risaro <nri...@gmail.com>
Reply all
Reply to author
Forward
0 new messages