2016-07-21 1 views
0

J'ai 2 entités. L'entité nr.1 contient quelques champs et quelques collections, mappé un à plusieurs LAZY, et l'entité nr.2 a une relation OneToOne avec celle-ci.Hibernate OneToOne à une entité qui a OneToMany

Lorsque je veux récupérer l'entité nr.2, tous les onetomany dans l'entité nr. 1 sont également récupérés, même s'ils sont LAZY. Je ne parle pas d'une méthode, en récupérant simplement une entité nr.2 et l'entité nr.1 sans ses collections.

Merci

exemples de code:

C'est une entité nr. 2, qui contient un OneToOne rel à nr.2 entité qui est spécifiée si:

@OneToOne 
@JoinColumn(name="id_employee") 
public Employee getEmployee() { 
    return employee; 
} 

public void setEmployee(Employee employee) { 
    this.employee = employee; 
} 

Et ceci est une entité no.1 qui a de nombreuses collections comme ceci:

@OneToMany(cascade = CascadeType.ALL, mappedBy="employee", orphanRemoval = true) 
@JsonManagedReference 
@XmlElement 
public Set<Phone> getPhone() { 
    return phone; 
} 

public void setPhone(Set<Phone> phone) { 
    this.phone = phone; 
} 

Ant employé a de nombreuses collections , y compris l'adresse et ainsi de suite, que je ne veux pas être montré. Lorsque je renvoie l'entité nr. 2, il me montre employé avec tous ses rels, et je n'ai pas besoin de cela. Il me donne aussi le fameux LazyInitexcepetion, bien que je ne adresse pas explicitement en demande ou par téléphone ...

+0

pouvez-vous s'il vous plaît partager votre code – Gokul

+0

je l'ai partagé, merci – ChrisTheDestroyer

+0

quand vous avez dit 'return nr.2' voulez-vous dire que vous ne le voulez pas représenté/représenté comme xml ou json? (Je suppose que vous l'exposez en tant que point de terminaison de repos puisque vous avez des annotations xml et json). Si c'est le cas, pourquoi ne pas ajouter les annotations XmlTransient et JsonIgnore dans votre getEmployee? – geneqew

Répondre

0
@OneToOne(fetch=FetchType.LAZY) 
@JoinColumn(name="id_employee") 
public Employee getEmployee() { 
    return employee; 
} 

De la spécification JPA 2.0, les paramètres par défaut sont comme ceci:

OneToMany: LAZY 
ManyToOne: EAGER 
ManyToMany: LAZY 
OneToOne: EAGER 
+0

Non, par défaut init init – ChrisTheDestroyer

+0

Et le chargement explicite me donne une erreur de sérialisation. – ChrisTheDestroyer

+0

partage le code donnant l'exception d'initialisation paresseux. Si vous faites quelque chose comme object.employee(). GetSomething() cela provoquera une initialisation paresseuse, car il se charge paresseusement maintenant. – Gokul

0

Je résolu dans l'intervalle en utilisant des requêtes personnalisées. Je n'ai donc que ce dont j'ai besoin des entités OneToOne, puis j'utilise le setter de l'entité principale pour définir ces collections sans aller chercher tout. Major réduit le nombre de sélections et de bande passante.