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()
5
A
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()
Problemi correlati
- 1. Genera test unitari per i metodi hashcode, equals e toString
- 2. Efficienza nell'uso di IEqualityComparer nel dizionario vs HashCode ed Equals()
- 3. Quando è necessario sovrascrivere i metodi equals e hashcode?
- 4. Generazione di equals/hashcode/toString tramite annotazione
- 5. Perché dovrei eseguire l'override di hashCode() quando sovrascrivo il metodo equals()?
- 6. Perché equals e hashCode sono stati definiti in Object?
- 7. Come definire in modo significativo hashCode ed equals per un java.lang.Class <T>?
- 8. Perché StringBuffer/StringBuilder non sovrascrive equals o hashCode?
- 9. Espressioni nei criteri di ibernazione
- 10. Java: modo pulito per lanciare UnsupportedOperationException quando si chiama hashCode() ed equals()?
- 11. Uso UUID per equals a basso costo() e hashCode()
- 12. In Java, perché equals() e hashCode() devono essere coerenti?
- 13. Generazione di hashCode() ed equals() durante la creazione di classi Java utilizzando il plug-in Maven di Mojo Jaxb2
- 14. Biblioteca con Equals e metodi di supporto GetHashCode per NET
- 15. HashSet aggiunge voci duplicate nonostante attuazione sia hashCode() e equals()
- 16. Devo implementare equals e hashCode in una classe di dominio?
- 17. conteggio (*) nei criteri di ibernazione?
- 18. Overriding hashCode() - è abbastanza buono?
- 19. Perché i metodi nativi hashCode() e getClass()?
- 20. Come dovrei mappare da lungo a int in hashCode()?
- 21. hashCode e uguale per Collections.unmodifiableCollection()
- 22. Il POJO Java deve avere la convalida del campo e generare eccezioni nei metodi setter?
- 23. Perché Java EE 6 richiede equals() e hashCode() da implementare per gli adattatori di risorse?
- 24. devo includere il file di versione jquery per usare jquery.ui.js?
- 25. Come funziona il metodo equals() in Java
- 26. Quando dovrei usare metodi statici?
- 27. Delega di funzione hash a delegati non inizializzati in cause di ibernazione che modificano hashCode
- 28. Devo includere categorie personalizzate nei miei progetti open source?
- 29. Cosa farei con un hashcode dell'oggetto .NET?
- 30. ibernazione - come impostare l'incremento automatico nei database mysql e oracle?
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