我正在使用休眠 3.6.3.Final。我有两个关系实体 A 和 B,其单向 ManyToOne 定义为:
@Entity public class A {
...
@Version @Column ( name = "ChangeNumber" )
public Long getVersion() { return version; }
@ManyToOne @JoinColumn( name = "B_ID" )
public B getRelationalB() { return relationalB; }
...
}
@Entity public class B {
@Version @Column ( name = "ChangeNumber" )
public Long getVersion() { return version; }
....
}
现在假设我在 db 中已经有一个 pk id = 1 的 B 实例,然后执行以下操作:
A a = new A();
a.setRelationalB( new B( 1 ) );
session.saveOrUpdate( a ) ;
引发著名的“TransientObjectException:对象引用了未保存的瞬态...”异常。令人惊讶的是,如果@Version @Column 被删除或设为@Transient,上面的代码将完全正常工作。知道为什么我要观察这种行为吗?