Hibernate: se dovessi includere il campo "Versione" su hashcode () ed equals () metodi
-
28-10-2019 - |
Domanda
Lo so quando si estende hashcode()
e equals()
Delle mie entità persistenti non dovrei includere ID e includere solo le proprietà significative che identificano in modo univoco l'oggetto. Ma per quanto riguarda version
campo che viene utilizzato per il Controllo ottimista di concorrenza di Hibernate? Dovrei saltarlo anche io, proprio come ID? E se diciamo new User(name='John', version=1).equals(new User(name='John',version=2))
, non confonderà in modo ibernato OCC?
Soluzione
Si consiglia di implementare Equals () e HashCode () utilizzando l'uguanta uguaglianza chiave. Uguaglianza chiave aziendale significa che il metodo equals () confronta solo le proprietà che formano la chiave di business. È una chiave che identificherebbe la nostra istanza nel mondo reale (una chiave del candidato naturale)
Quindi dovresti non includere la proprietà della versione in equals()
hashcode()
Fare riferimento: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/persistent-classes.html#persistent-classes-equalshashcode