5

So che quando si sostituisce hashcode() e equals() delle mie entità persistenti non dovrei includere ID e includere solo le proprietà significative che identificano univocamente l'oggetto . Ma che dire del campo version utilizzato per il controllo di concorrenza ottimista da Hibernate? Dovrei saltare anche io, proprio come l'ID? Cosa succede se diciamo new User(name='John', version=1).equals(new User(name='John',version=2)), non confonderà comunque Hibernate OCC?Ibernazione: dovrei includere il campo "versione" nei metodi hashcode() ed equals()

risposta

3

Si consiglia di implementare equals() e hashCode() utilizzando l'uguaglianza della chiave Business. L'uguaglianza delle chiavi di business significa che il metodo equals() confronta solo le proprietà che formano la chiave aziendale. Si tratta di una chiave che identificherebbe il nostro esempio nel mondo reale (una chiave candidata naturale)

Così si dovrebbe non includere proprietà di versione nel equals()hashcode()

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

+0

Sì, lo' Ho letto questo. Ma dal momento che il campo 'version' non è menzionato lì e tenendo conto del suo scopo (valori diversi significano oggetti diversi) ho dubitato. Ma Hibernate consiglia di non usare 'version' per nient'altro nell'applicazione. Quindi, più ci penso e più mi convinco che la 'versione' dovrebbe ** non ** essere inclusa in' equals() 'e' hashcode() '. – wajda

Problemi correlati