2010-11-21 6 views
0

s'associe Dans mon hypothétique j'annotée classe modèle utilisateur. Ce modèle de l'utilisateur détient également des références à deux séries:Mise en veille prolongée et EntityManager avec

  • un ensemble d'objets pour animaux (un objet Pet est également un modèle annoté représenté dans la couche de données)
  • Un ensemble d'objets alimentaires (un objet Pet est également un modèle annoté représenté dans la couche de données)

Quand je tire l'entité utilisateur de la base de données (entityManager.find (User.class, id)) il remplira automatiquement tous les champs de l'utilisateur, mais il remplir évidemment la coutume deux jeux.

Est-ce que je dois faire entityManager.createQuery et il suffit d'utiliser un SQL normale requête de jointure puis créer manuellement l'objet utilisateur?

Merci à l'avance

Répondre

2

Si vous associez vos relations de l'utilisateur Pet et de l'alimentation à l'aide OneToMany vous pouvez choisir d'avoir ou non les champs automatiquement collectés ou non.

Voir la API doc for javax.persistence OneToMany.

Selon la façon dont vous avez construit la cartographie (PK-FK ou joindre des tables, etc.), vous pouvez ou ne peut pas obtenir de bonnes performances avec cela. Avoir deux relations OneToMany qui sont jointes, signifie que vous pouvez vous retrouver avec une quantité ridicule de lignes lorsque vous lisez votre utilisateur.

2

Mmm, non? Ce n'est probablement pas comme ça que vous voulez le faire. Je ne sais pas pourquoi vous dites "cela ne remplira évidemment pas les deux ensembles". Il est tout à fait capable de remplir les ensembles pour vous, c'est en quelque sorte le point derrière l'utilisation d'un ORM comme Hibernate en premier lieu. Vos objets font ce qu'ils devraient être dans le code et les choses 'databasey' sont traitées automatiquement autant que possible. Il est vrai qu'Hibernate va se plaindre si vous marquez plus d'une collection quand EAGER a été récupéré, mais il n'est pas vraiment clair que vous ayez besoin d'être impatient. Pour l'essentiel, une fois qu'ils sont mis en correspondance, il suffit de les accès à cause des requêtes à exécuter pour les remplir avec des données (en supposant que la session est toujours ouverte et ainsi de suite.) Si vous expliquez comment vous voulez que cela fonctionne, il serait plus facile d'aider avec une solution.

Questions connexes