En supposant que les correspondances suivantes sont fournies:Est-il possible d'avoir une clé étrangère appliquée sans mappage objet-objet?
<class name="A" table="a_table">
<id name="id"/>
<many-to-one name="entityB" column="fk_B" not-null="false" unique="true"/>
</class>
<class name="B" table="b_table">
<id name="id"/>
</class>
classe Java:
public class A {
private long id;
private B entityB;
// getters and setters skipped
}
Est-il possible de changer le mapping Hibernate afin que clé étrangère est toujours appliquée et créé par Mise en veille prolongée lors du démarrage, mais la classe A
ressemblerait à ce qui suit:
public class A {
private long id;
private long idOfB;
// getters and setters skipped
}
Je comprends que si je convertis <many-to-one...
en <property...
cela fonctionnerait, mais la clé étrangère ne serait pas appliquée par la base de données.
que je dois faire cela parce que l'objet B
pourrait (ou non) être initialisé séparément, ce qui provoque parfois des exceptions org.hibernate.LazyInitializationException: could not initialize proxy - no Session
se produire lorsque a.getB()
est appelé. Je préférerais l'avoir comme long idOfB
et charger l'objet entier chaque fois que c'est nécessaire; cela rendrait également le chargement de l'objet A
plus rapide.
Je crois que ma question est très semblable à this one, mais la solution proposée (pour utiliser le chargement paresseux) ne convient pas dans mon cas, même si je l'appelle a.getB().getId()
, je reçois LazyInitializationException
alors si je l'appelle a.getIdOfB()
je n » t.
Merci beaucoup d'avance.
Je recommande fortement d'utiliser LazyLoading plutôt que de réinventer la roue. Vous obtiendrez des classes d'entités sécurisées, avec exactement les mêmes performances, et vous pourrez potentiellement supprimer le code de rechargement personnalisé. Notez que LazyLoading entraîne uniquement une exception LazyLoadingException si elle est utilisée de manière incorrecte, c'est-à-dire si la charge paresseuse est demandée après la fermeture de la session. Notez également que demander l'identifiant d'un objet n'entraîne pas le chargement de l'objet. Je vous recommande de poser une question avec les problèmes spécifiques que vous avez avec LazyLoading. – meriton
Croyez-moi, j'utilise LazyLoading. C'est juste un cas sur des centaines où je ne peux pas. Sinon, je ne le demanderais pas. – mindas
Question connexe: [java - Hibernate - Clés étrangères au lieu d'entités] (http://stackoverflow.com/questions/6311776/hibernate-foreign-keys-instead-of-entities). –