Pourquoi le chargement Paresseux ne travaillant pas dans une à une association?
@Entity
public class Person {
@Id
@GeneratedValue
private int personId;
@OneToOne(cascade=CascadeType.ALL, mappedBy="person", fetch=FetchType.LAZY)
private PersonDetail personDetail;
//getters and setters
}
@Entity
public class PersonDetail {
@Id
@GeneratedValue
private int personDetailId;
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
private Person person;
//getters and setters
}
quand je fais
Person person1=(Person)session.get(Person.class, 1);
je vois deux requêtes de mise à feu. l'un pour l'extraction de données et l'autre pour les données de détail.
Selon ma compréhension 1 seule requête doit avoir été congédié qui est de l'extraction de données pas pour personne les données de détail comme je l'ai mentionné
chargement différé. Pourquoi personDetail les données sont récupérées avec personne des données ?
Vérifier this thread, qui l'explique bien.
OriginalL'auteur M Sach | 2014-02-01
Vous devez vous connecter pour publier un commentaire.
Hibernate ne peut pas proxy votre propre objet, comme il le fait pour les Jeux /les Listes
@ToMany
relation, de sorte que le chargement Paresseux ne fonctionne pas.Je pense que ce lien peut être utile pour comprendre votre problème: http://justonjava.blogspot.co.uk/2010/09/lazy-one-to-one-and-one-to-many.html
OriginalL'auteur gipinani
Basé sur vos commentaires et depuis le
PersonDetail
entité contient une colonne de clé étrangère qui fait référence à laPerson
entité, il semble que vous n'avez 1 problème:Relations d'entités comprennent le concept de relation propriétaire (dans ce cas
PersonDetail
), ce qui signifie que vous voulez ajouter un@JoinColumn
annotation dans lePersonDetail
entité.Vous avez déjà défini correctement l'inverse du côté de la relation (l'entité qui n'est pas le propriétaire de la relation) avec le
mappedBy
attribut a été ajouté à l'association d'annotation (@OneToOne
dans votre cas) pour faire de la relation bi-directionnelle, ce qui signifie que les associésPersonDetail
peut être atteint à partir d'unPerson
instance.Compte tenu de la relation qui est précisé dans votre commentaire, vous ne devriez avoir à faire 1 changement de votre code comme indiqué ici:
Ok, j'ai mis à jour ma réponse en fonction de votre commentaire. Je pense que l'ajout des annotations @JoinColumn annotation est tout ce que vous devez avoir à les changer.
J'ai mis à jour ma réponse à s'aligner avec l'information dans votre commentaire. Si votre question est résolue avec les autres DONC, la question de la référence, vous souhaiterez peut-être supprimer cette question ou poster votre propre réponse qui fait référence à cette question. De cette façon, il sera toujours utile pour les autres, qui trouvent leur manière à cette question tout en regardant pour les aider avec un problème similaire.
Je ne pense pas que les annotations @ JoinColumn annotation est même nécessaire, sauf si vous avez besoin de lui donner des accessoires comme nullable = false, pouvant être mis à jour = false, etc. JPA peut déjà dire c'est pas un @ Base de la colonne... donc les annotations @ JoinColumn annotation ne sera probablement pas faire quoi que ce soit.
OriginalL'auteur Sean Mickey