2016-06-12 15 views
0

Ich wollte eine einfache Eltern-Kind-Beziehung zuordnen.Hibernate - Persistente Sammlung von @ OneToMany-Entitäten

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "mother") 
public Set<User> getChildren() { 
    return children; 
} 

@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
@JoinColumn(name = "MOTHER_ID") 
public User getMother() { 
    return this.mother; 
} 

Testfall:

@Test 
public void t4adopt() { 
    User ewa = session.find(User.class, 1L); 
    User user = new User("abel", "[email protected]"); 
    session.persist(user); 
    ewa.getChildren().add(user); 
    System.out.println("save eva's children"); 
    session.saveOrUpdate(ewa); 
    //session.save(user); 
    session.flush(); 
    System.out.println("4. " + ewa); 
    session.refresh(user); 
    System.out.println("5. " + user); 
} 
@Before 
public void start() { 
    session.getTransaction().begin(); 
} 

@After 
public void close() { 
    session.getTransaction().commit(); 
    session.close(); 
} 

Hibernate hat zuweisen nicht Mutter ID in untergeordneter Entität.

5. User [idUser=3, mother=null, [email protected], name=null, surname=null, userGroups=[], userLogin=abel] 

Wenn ich Kind direkt der Mutter zuweisen, funktioniert es.

User user = new User("kain", "[email protected]"); 
User ewa = session.find(User.class, 1L); 
user.setMother(ewa); 
session.persist(user); //ok 

Antwort

1

von

Einstellung
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, 
mappedBy = "mother") public Set<User> getChildren() { 
return children; } 

Sie erklärte mappedBy=mother, das bedeutet, dass User die besitzende Einheit der Beziehung ist und die Beziehung wird auf mother Feld gesetzt. In JPA/Hibernate wird die besitzende Seite verwendet, um Beziehungen zwischen Entitäten aufrechtzuerhalten und aufrechtzuerhalten.

Bitte nehmen Sie sich einen Blick auf, dass: https://stackoverflow.com/a/21068644/2392469

+0

Ohne mappedBy Hibernate werden separate Tabelle erstellen bezogene Benutzer Änderungen id.With mappedBy Hibernte nicht verfolgen auf die Mutter der Kinder gemacht zu speichern. Es gibt also keine Möglichkeit, es wie erwartet funktionieren zu lassen, es gibt keine Möglichkeit, Hibernate mitzuteilen, dass "MOTHER_ID Filed verwendet wird, um Änderungen statt einer separaten Tabelle zu verfolgen"? – Damian

Verwandte Themen