我正在测试级联的工作方式,遇到了一些令我困惑的东西。我有两个简单的实体:
@Entity
public class Child {
@Id
Long id;
@OneToOne()
@JoinColumn(name = "JOINCOLMN",referencedColumnName = "ID")
Person person;
}
@Entity
public class Person {
@Id
Long id;
@OneToOne(mappedBy = "person",cascade = CascadeType.ALL)
Child child;
}
我正在测试级联类型的持久性。所以我写了这段代码:
Person person = new Person();
person.setId(100L);
person.setName("SomeName");
Child child = new Child();
child.setId(60L);
child.setPerson(person);
personRepository.save(person);
但是,即使他们两个都被假设要坚持下去,也只有这个人会坚持下去。所以第一个问题是:
- 为什么这不起作用?
我搜索了一下,发现使用Hibernate实体管理器的人。这是持久级联类型起作用的示例:
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Author a = new Author();
a.setfirstName(“John”);
a.setLastName(“Doe”);
Book b1 = new Book();
b1.setTitle(“John’s first book”);
a.getBooks().add(b1);
Book b2 = new Book();
b2.setTitle(“John’s second book”);
a.getBooks().add(b2);
em.persist(a);
em.getTransaction().commit();
em.close();
我的第二个问题是:
- 我可以看到实体管理器用于管理交易和管理实体。但是我从不使用它,那么我的代码会发生什么呢?谁管理交易?谁保留实体?