在Hibernate中保留具有预定义标识符的对象

时间:2011-02-11 16:00:02

标签: hibernate

我有点困惑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 ,这是一种浪费。

0 个答案:

没有答案