Pouvez propriétés mappé dans hbm.xml être passager?
Supposons que j'ai un User
entité comme ceci:
class User {
private String login;
transient private String hashedPassword;
}
Je ne veux jamais le transfert de hashedPassword
pour les clients, donc je le fais transitoire.
Cette classe est représentée par Hibernate, avec les deux champs mappés dans hbm.xml.
Est cette mise en œuvre sûre et correcte? Mettra en veille prolongée stocker correctement hashedPassword
dans la base de données, le charge dans les objets de base de données, maintenir dans répliqué 2e cache de niveau local et le cache de session etc?
En d'autres termes, ne Hibernate ou 2ème niveau de cache respect transient
en aucune façon, ou de les ignorer complètement?
MODIFIER: j'ai déjà eu deux réponses qui ne semblent pas comprendre un aspect particulier de l'équation. Je ne suis pas à l'aide d'annotations à tous, seuls les mappages XML dans hbm.xml
. Et ce Java-transitoire champ OU mappé dans hbm.xml
.
OriginalL'auteur Konrad Garus | 2011-12-28
Vous devez vous connecter pour publier un commentaire.
Unmapped/Transitoire propriétés ne sont pas sauvegardées par hibernate.
Hibernate comprend la signification de la norme java modificateurs de transitoires - mais vous permet également d'annoter des propriétés transitoires à l'aide de @Transitoire annotation, si vous le souhaitez... Ou tout simplement laisser le champ de votre fichier de mappage tout à fait.
Dans votre cas, vous n'aurez probablement PAS besoin de faire quelque chose de spécial, hibernate doit simplement "faire la bonne chose", en ignorant les champs non mappés.
Donc : la leçon à retenir ici -
Si seulement à l'aide de hbm.xml
1) Décrivant les propriétés ne sont pas enregistrées par hibernate - ils sont effectivement transitoire.
Si l'utilisation de Pojo
2) Hibernate va ignorer l'enregistrement des "@Transitoire", annoté variables :
3) Hibernate va également ignorer sauver des variables avec la norme "transitoire" modificateurs :
Voir http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/ pour une excellente explication de ce.
Oui c'est vrai - le POJO annotation stuff n'est pas pertinent. J'ai ajouté une balle à répondre à votre question. Dans tous les cas, c'est simple, il suffit de laisser la variable de votre carte - et hibernate va regarder de l'autre. Pas de sauvegarde ou de mise en cache sera fait, parce que hibernate "carte" de votre objet ne sera pas inclure le unmapped variable.
Merci jay, mais mon point est tout à fait opposé. Je me demande si il est toujours plus sûr, 2e lv cache et autres joyeusetés, pour avoir un transitoire POJO champ mappé avec hbm.xml.
OriginalL'auteur jayunit100
Il ressemble à Hibernate ne persistera pas un champ avec le
transient
mot-clé, indépendamment de ce que d'autres annotations que vous avez.Les séparer
@Transient
annotation vous permettent de les diriger d'Hibernation pour ignorer un non-transitoire domaine de la persistance, mais je ne pense pas que c'est possible de faire l'inverse de l'avoir Hibernate persister untransient
champ.Discussion similaire ici:
JPA - à l'aide d'annotations dans un modèle
L'Annotation @Base transitoire variables
Les plus pertinents devis par-dessus, à partir de JPA 2.0 spec: "la Cartographie des annotations ne doit pas être appliquée à des champs ou des propriétés qui sont
transient
ou@Transient
."Ne Hibernate en fait la carte de la propriété dans ce cas? J'étais sous l'hypothèse que les annotations et hbm.xml se comportaient de la même, mais peut-être que ce n'est pas le cas. Depuis
transient
permettra de s'assurer que la propriété n'est pas sérialisé, votre question est tout à fait à propos Hibernate comportement?OriginalL'auteur wrschneider
Voici ce que je pense -
Hibernate est juste une technologie de cartographie. Lorsque vous marquez un champ TRANSITOIRE, il ne seront pas conservées par java. Et depuis, son état n'est pas conservée pourquoi hibernate conserver dans le cache L2, etc ? donc, hibernate devriez pas avoir de problème, même si vous avez la carte la passagère du champ dans hbm fichier.
OriginalL'auteur Ashish K Agarwal