6 votes

Sauvegarde d'un objet hibernate avec une clé étrangère sans charger l'objet dépendant.

Lorsque nous enregistrons un objet dans Hibernate, nous enregistrons l'objet dépendant non pas en tant qu'identifiant mais en chargeant cet objet et en l'enregistrant.

Ex : Employé a une clé étrangère département, donc si nous avons besoin de sauvegarder l'objet employé alors nous ferons quelque chose comme :

saveEmployee{
emp.setName(name);
Department department = session.find(Department.class,deptid);
emp.setDepartment(department);
}

Maintenant, dans le cas où nous importons 1000 enregistrements et où nous avons deptid comme une colonne séparée dans Excel, alors 1000 fois inutiles db sera appelé pour récupérer le département respectif.

Y a-t-il un meilleur moyen de faire cela ? Est-il possible d'appliquer une clé étrangère sans mappage d'objet à objet ?

4voto

Maciej Kowalski Points 12727

Utilisez le load au lieu de find :

Department department = session.load(Department.class,deptid);

Le fournisseur de persistance ne créera qu'un proxy à ce stade et supposera que l'entité existe physiquement dans la base de données (une erreur sera signalée si l'entité n'est pas là, ne l'oubliez pas).

A condition que toutes vos opérations soient comprises dans une méthode transactionnelle, vous obtiendrez un nombre N d'insertions sans aucune sélection.

Prograide.com

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.

Powered by:

X