在Hibernate中使用预定义标识符持久化对象

在Hibernate中使用预定义标识符持久化对象,hibernate,Hibernate,我有点困惑,当坚持的时候,Hibernate实际上是如何工作的。让我举几个例子来澄清我的困惑,例1: 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

我有点困惑,当坚持的时候,Hibernate实际上是如何工作的。让我举几个例子来澄清我的困惑,例1:

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);
B类{
@身份证
int-id;
@OneToMany(级联=级联类型.ALL)
@JoinColumn(name=“投标”)
设置cs;
}
C类{
@身份证
int-id;
}
B=新的B();
b、 id=2;
C=新的C()
c、 id=3
Set cs=新的HashSet();
cs.添加(c);
b、 cs=cs;
em.b;
这几乎可以奏效。将发生的情况是ab都使用正确的标识符23进行持久化。然而,在表C中,投标将是空的?!为什么?


请不要说我应该在空数据库上使用merge,这太浪费了。

你确定它实际上是空的吗?是的。在保存新数据之前,将清除所有表。