2016-10-29 5 views
0

У меня есть родитель и порожденное отношение:
Hibernate сохраняющегося лица неожиданного поведение

public class Parent{ 
    private int id; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy="parent", orphanRemoval=true) 
    private List<Child> childs = new ArrayList<>(); 
} 

public class Child{ 
    private int id; 
    @ManyToOne 
    private Parent parent; 
} 

И я создал функцию упорствовать родитель с его Детской:

public void persist(Parent obj) { 
     Session session = HibernateUtil.sessionFactory.openSession(); 
     Transaction tx = null; 
     try { 
      tx = session.beginTransaction(); 
      session.saveOrUpdate(obj); 
      tx.commit(); 
     } catch (HibernateException e) { 
      if (tx != null) 
       tx.rollback(); 
      e.printStackTrace(); 
     } finally { 
      session.close(); 
     } 
    } 

Поскольку лицами beign родительском сохранялось в одной транзакции, поэтому ожидаемое поведение Hibernate в том, что если что-то пойдет не так, вставляя дочерние элементы, родительский элемент тоже не будет вставлен, но у меня что-то другое!
Hibernate вставил родителя, и когда дети не были вставлены, откат не произошел! Поэтому я нашел себя с родителем только в базе данных!
Это нормально или я делаю что-то не так?!

ответ

0

Try так:

public class Parent{ 
    @Id 
    @Column(name = "id", unique = true, nullable = false) 
    private int id; 

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL,mappedBy="parent", orphanRemoval=true) 
    private List<Child> childs = new ArrayList<>(); 
} 

public class Child{ 
    @Id 
    @Column(name = "id", unique = true, nullable = false) 
    private int id; 

    @Column(name = "parent_id", nullable = false) 
    private int parent_id; 

    @ManyToOne(cascade=CascadeType.ALL) 
    @JoinColumn(name = "parent_id", insertable = false, updatable = false) 
    private Parent parent; 
} 
Смежные вопросы