J'ai des entités JPA où certaines propriétés sont annotées avec devrais-je utiliser ces propriétés dans Ma première pensée est @Transient code>. p>
égaux / hashcode / tostring code> méthodes? p>
3 Réponses :
Les deux usages typiques de pour Données calculées forts>, il n'a aucun sens de les utiliser dans la relation d'égalité ( pour Données non sérialisables / perspectives fortes>, cela dépend. Je peux imaginer une poignée à une ressource qui n'est pas sérialisable, mais vous pouvez toujours comparer le nom de la ressource que le manche représente. Idem pour C'était mon 2 cent, mais si vous expliquez votre usage particulier de @Transient code> et
transitoires code> dont je suis au courant, êtes de les utiliser soit pour des choses qui ne peuvent pas être sérialisées / persistées (par exemple une ressource distante poignée em>) ou des propriétés calculées qui peuvent être reconstruites à partir d'autres. p>
égaux / hashcode code>), car il serait redondant. La valeur est calculée hors d'autre valeur déjà utilisée dans l'égalité. Il peut toutefois tout de même loger de les imprimer dans
Tostring code> (par exemple un prix de base et un rapport servent à calculer le prix réel). P>
tostring code>, peut-être impressionner le nom de la ressource de la poignée est utile. p>
@Transient code>, une personne peut peut-être donner un meilleur conseil. P>
Le cas de Premièrement, la règle: Si vous souhaitez stocker un objet dans une liste Maintenant, comment implémenter Malheureusement, cette solution a un problème majeur L'approche recommandée consiste ainsi à utiliser les attributs qui font partie de la touche EM> em> c'est-à-dire une combinaison d'attributs unique pour chaque instance avec la même identité de la base de données. Par exemple, pour la classe utilisateur, cela pourrait être le nom d'utilisateur: p> La documentation de référence Hibernate résume celle-ci comme suit: p> " N'utilisez jamais l'identifiant de la base de données pour implémenter l'égalité; utilisez une clé d'entreprise, une combinaison d'attributs uniques, généralement immuables, d'attributs forts>. L'identifiant de la base de données changera si un objet transitoire est rendu persistant. Si le L'instance transitoire (généralement avec des instances détachées) est détenue dans un " Il est recommandé de mettre en œuvre Alors, retour à la question initiale: p> tostring () code> est différent, vous pouvez faire ce que vous voulez avec
Tostring () code> donc je ne couvrirai que
égal () code > (et
hashcode () code>).
code>,
mappe code> ou a
définir code>
est égal à code> et
hashcode code> est mis en œuvre strong> afin qu'ils obéissent donc au contrat standard Comme spécifié dans la documentation em>. p>
Equals () code> et
hashcode () code>? Une idée "naturelle" serait d'utiliser les propriétés mappées comme code> id code> dans le cadre du
égale () code>: p>
code> avant d'être enregistré, son code de hachage changera lorsqu'il est dans l'ensemble code> CODE> et ceci enfreint le contrat de l'ensemble code>. P>
SET CODE>, la modification du fichier
Hashcode code> casse le contrat du fichier
défini code>. Attributs pour les clés de l'entreprise Ne devez pas être aussi stable que les clés principales de base de données, il vous suffit de garantir la stabilité tant que les objets sont dans le même ensemble. " - 12.1.3. Considérant l'identité d'objet p>
égale () code> et
hashcode () code> à l'aide de l'égalité des touches commerciales forte>. L'égalité des clés métier signifie que le < Code> Equals () Code> La méthode ne compare que les propriétés qui forment la clé Business. C'est une clé qui identifierait notre instance dans le monde réel (une clé de candidature naturelle) "- 4.3. Mise en œuvre égales () et HASHCODE () P>
blockQuote>
@Transient code> Les attributs ne font probablement pas partie d'une telle clé. Li>
mappe code>,
définir code >. li>
ul>
Voir aussi h3>
Exception peut-être vient de le laisser être transitère code> et dans le même temps que vous fournissez
wrecroveObject () code> et
lisaBject () code> où vous le traitez . p>