休止状態の 3.6.3.Final を使用しています。次のように定義された一方向の ManyToOne を持つ 2 つのリレーショナル エンティティ A と B があります。
@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; }
....
}
ここで、すでに pk id = 1 で db に永続的な B インスタンスがあり、次の操作を行っているとします。
A a = new A();
a.setRelationalB( new B( 1 ) );
session.saveOrUpdate( a ) ;
有名な「TransientObjectException: object references an unsaved transient...」例外をスローします。驚くべきことに、@Version @Column を削除するか @Transient にすると、上記のコードは問題なく動作します。なぜ私がこの行動を観察しているのか分かりますか?