15
@Entity
public class Person {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private int salary;
@Version
private long version;
// ...getters and setters
}
- ¿Se requiere para crear setter/getter para
version
? - Al persistir esta entidad con Hibernate, no es necesario que establezca este valor manualmente, ¿verdad?
- ¿Qué más necesito configurar para utilizar la comprobación de concurrencia optimista con Spring's
hibernateTemplate.saveOrUpdate
? ¿Son compatibles todas las bases de datos? - ¿Cómo probar la unidad de esta entidad? En mi base de datos, todos mis registros que muestran el campo de versión tienen el valor de 0
- ¿Llamarán
hibernateTemplate.saveOrUpdate
para incrementar el valor de la versión cada vez?
@KLE solo en caso de que el usuario 2 llame a hibernatetemplate.saveorupdate al mismo tiempo, no hay necesidad de realizar comprobaciones adicionales cuando llame a la llamada hibernatetemplate.saveorupdate? cualquier excepción arroja? – cometta
@cometta El punto es no guardar o no, pero de dónde provienen los datos. En una transacción, ** si lee una entidad de la base de datos **, su información de versión está actualizada. Cuando lo guardas, se lo cuida automáticamente. Si pasa algún día para obtener los datos de otra fuente (por ejemplo, la publicación de un formulario), y vuelve a crear la entidad, entonces usted debe cuidar la versión usted mismo. – KLE
Una explicación bastante buena está aquí: http://en.wikibooks.org/wiki/Java_Persistence/Locking – Zilvinas