Je souhaite vérifier si l'entité fait partie d'un membre de la collection ( @OneToMany
ou @ManyToMany
) d'une autre entité:
if (entity2.getEntities1().contains(entity1)) { }
Je souhaite vérifier si l'entité fait partie d'un membre de la collection ( @OneToMany
ou @ManyToMany
) d'une autre entité:
if (entity2.getEntities1().contains(entity1)) { }
Pas nécessairement. Il y a trois options:
ne pas remplacer - donc, vous allez travailler avec les instances. C'est d'amende dans le cas où vous travaillez avec les collections avec seulement les entités qui sont attachés à la session (et donc la garantie d'être à la même instance). C'est (pour moi) la méthode privilégiée dans de nombreux cas, car il nécessite moins de code et de la considération lors de la substitution
remplacer hashCode()
et equals()
avec une clé d'entreprise. Peut-être un sous-ensemble de propriétés qui permettent d'identifier l'entité. Par exemple, pour un User
une bonne clé d'entreprise pourrait être l' username
ou email
. Ceci est considéré comme une bonne pratique.
remplacer hashCode()
et equals()
à l'aide de l'ID de domaine seulement. C'est très bien, dans certains cas, surtout si vous avez une main-identifiant attribué (comme un UUID). C'est aussi bien si votre entité ne sera jamais aller dans une collection. Mais passagère entités (sans identifiant) qui entrent dans les collections, il provoque des problèmes, donc prudent avec cette option. Comme seanizer noté - vous devriez éviter. Généralement, toujours, à moins que vous êtes vraiment au courant de ce que vous faites (et peut-être en train de le documenter)
Voir cet article pour plus de détails. Notez aussi que l' equals()
et hashCode()
sont liés et doivent être mises en œuvre à la fois avec exactement les mêmes champs.
Oui, vous devez définir les méthodes equals()
et hashcode()
, mais vous ne devez JAMAIS laisser l'id faire partie de l'une ou l'autre. (Voir ma récente réponse dans une question similaire)
C'est le seul moyen. Vous voudrez peut-être essayer la bibliothèque Pojomatic qui fait le travail difficile pour vous.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.