2010-11-18 14 views
1
@Entity public class Organization {} 

@Entity public class User { 
    @ManyToOne 
    Organization org; 
} 

Le @ManyToOne interface dans le code ci-dessus est modelée comme « Organization org », même si seulement l'ID d'organisation est stocké dans la base de données . Je ne peux pas simplement modéliser ceci comme Integer orgId afin que je puisse éviter de charger l'ensemble de l'objet Organisation à des fins de persistance. Parfois, lorsque nous importons en vrac des utilisateurs pour des organisations différentes, il faut parfois consacrer plus de temps au chargement des organisations qu'à la persistance de l'utilisateur lui-même. Aimeriez-vous savoir comment les autres traitent ce problème?Serait-il possible de simplement exposer la clé étrangère au lieu de l'objet entier dans une interface @ManyToOne

Répondre

2

Vous devez utiliser @ManyToOne(fetch=FetchType.LAZY) pour le chargement paresseux Hibernate (FetchType.LAZY) afin que l'objet Organisation entière ne soit pas chargé. Si vous accédez seulement à user.org.id, hibernate saura ne pas rejoindre toute la table juste pour trouver l'ID de l'organisation.

Voir http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-singleassoc-fetching

Et oui vous pouvez qu'élaborer Integer orgId si c'est vraiment le seul champ que vous utiliserez dans votre code.