Hallo,
Bei uns im Team ist eine heisse Diskussion um das Überschreiben der oben genannten Funktionen entbrannt.
Speizell geht es momentan um Data-Transfer-Objekte (DTOs). Jede solche Klasse hat eine ID (Long) und dann - je nach fachlicher Verwendung - unterschiedliche weitere Attribute.
Technisch gesehen könnte man zwei Instanzen der gleichen Klasse als "äquivalent" betrachten, wenn sie die gleiche ID haben. Deswegen kam die Idee auf, hashCode und equals Methode über die entsprechenden Methoden der ID zu implementieren.
Dabei gibt es aber zwei Probleme:
1. Sind sie dann fachlich auch gleich? Beispiel: Änderungen durch einen Nutzer werden in ein Dto gespeichert. Ist das geänderte DTO dann noch äquivalent zur ursprünglichen Variante?
2. "Neue", noch nicht persistierte Objekte haben noch keine Id, diese wird erst beim Persistieren durch Hibernate (bzw. die Datenbank-Sequenz) gesetzt. Wie behandelt man also solche Objekte?
Ich persönlich sehe bei 1. kein wirkliches Problem - dieser Fall tritt momentan so nicht auf, und wenn er auftreten sollte, ist auch nicht mehr Aufwand notwendig als bisher - man müsste manuell auf Äquivalenz prüfen.
Zu 2. ist mir bislang allerdings noch keine einleuchtende Strategie eingefallen.
Ich hoffe an dieser Stelle erst mal auf eine Anregungen, Links, Ideen, etc., die ich hier noch in die Runde einbringen kann...
Mich nervt es z.B. tierisch, nicht einfach die contains Methode diverser Collections nutzen zu können. Stattdessen iteriere ich ständig über die Collection und prüfe jeweils, ob die Id mit der gesuchten übereinstimmt, oder erzeuge zunächst ein HashSet aller Ids in der Collection, und führe dann ein contains mit der gesuchten Id durch...
Das muss doch auch einfacher gehen?!
Gruß,
RoCMe
Bei uns im Team ist eine heisse Diskussion um das Überschreiben der oben genannten Funktionen entbrannt.
Speizell geht es momentan um Data-Transfer-Objekte (DTOs). Jede solche Klasse hat eine ID (Long) und dann - je nach fachlicher Verwendung - unterschiedliche weitere Attribute.
Technisch gesehen könnte man zwei Instanzen der gleichen Klasse als "äquivalent" betrachten, wenn sie die gleiche ID haben. Deswegen kam die Idee auf, hashCode und equals Methode über die entsprechenden Methoden der ID zu implementieren.
Dabei gibt es aber zwei Probleme:
1. Sind sie dann fachlich auch gleich? Beispiel: Änderungen durch einen Nutzer werden in ein Dto gespeichert. Ist das geänderte DTO dann noch äquivalent zur ursprünglichen Variante?
2. "Neue", noch nicht persistierte Objekte haben noch keine Id, diese wird erst beim Persistieren durch Hibernate (bzw. die Datenbank-Sequenz) gesetzt. Wie behandelt man also solche Objekte?
Ich persönlich sehe bei 1. kein wirkliches Problem - dieser Fall tritt momentan so nicht auf, und wenn er auftreten sollte, ist auch nicht mehr Aufwand notwendig als bisher - man müsste manuell auf Äquivalenz prüfen.
Zu 2. ist mir bislang allerdings noch keine einleuchtende Strategie eingefallen.
Ich hoffe an dieser Stelle erst mal auf eine Anregungen, Links, Ideen, etc., die ich hier noch in die Runde einbringen kann...
Mich nervt es z.B. tierisch, nicht einfach die contains Methode diverser Collections nutzen zu können. Stattdessen iteriere ich ständig über die Collection und prüfe jeweils, ob die Id mit der gesuchten übereinstimmt, oder erzeuge zunächst ein HashSet aller Ids in der Collection, und führe dann ein contains mit der gesuchten Id durch...
Das muss doch auch einfacher gehen?!
Gruß,
RoCMe