我有点困惑Hibernate在持久化时的实际工作方式。因此,让我举例说明我的困惑,例如:
class A {
@Id
int id;
}
A a = new A();
a.id = 1;
em.persist(a);
对象 a 将保留标识符 1 。
示例2:
class B {
@Id
int id;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "bId")
Set<C> cs;
}
class C {
@Id
int id;
}
B b = new B();
b.id = 2;
C c = new C()
c.id = 3
Set<C> cs = new HashSet<C>();
cs.add(c);
b.cs = cs;
em.persist(b);
这几乎可行。会发生的是 a 和 b 都会使用正确的标识符 2 和 3 保留。但是在表 C 中, bId 将为空?!为什么呢?
请不要说我应该在空数据库上使用 merge ,这是一种浪费。