5

Sé que al anular hashcode() y de mis entidades persistentes no debería incluir ID y solo incluir las propiedades significativas que identifican el objeto de manera única . ¿Pero qué pasa con el campo version que se utiliza para el control de concurrencia optimista de Hibernate? ¿Debería omitirlo también, al igual que ID? ¿Qué pasa si digamos new User(name='John', version=1).equals(new User(name='John',version=2)), de todos modos no confundirá Hibernate OCC?Hibernate: ¿Debo incluir el campo 'versión' en los métodos hashcode() y equals()

Respuesta

3

Se recomienda que implemente equals() y hashCode() utilizando Business key equality. La igualdad de clave empresarial significa que el método equals() compara solo las propiedades que forman la clave comercial. Es una clave que podría identificar nuestra instancia en el mundo real (una clave candidata natural)

Por lo que debe no incluir la propiedad de versión en el equals()hashcode()

Consulte: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/persistent-classes.html#persistent-classes-equalshashcode

+0

Sí, me' he leído eso. Pero dado que el campo 'versión' no se menciona allí y teniendo en cuenta su propósito (diferentes valores significan diferentes objetos) lo dudé. Pero Hibernate recomienda no usar 'versión' para nada más en la aplicación. Por lo tanto, cuanto más lo pienso, más me convenzo de que la 'versión 'no debe ** incluirse ** en' equals() 'y' hashcode() '. – wajda

Cuestiones relacionadas