次のようなクラス A があります。
class A {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "DBId")
private Long DBId = null;
@OneToMany(cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
List<B> list;
}
そしてクラスBのような
class B {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "DBId")
private Long DBId = null;
}
クラス A の新しいインスタンスを永続化したい場合、2 つのケースが考えられます。1- A 内の B のすべてのインスタンスが新しい場合、単純な session.save(A) で問題ありません。2- A の B のインスタンスの一部またはすべてが古い。Bが重複しないようにAを保存するにはどうすればよいですか。saveOrUpdate は問題を解決しますか? または、A を見るだけで保存または更新の選択を決定するだけで、たとえば、A が新しい場合は Bs の保存も呼び出され、A が古い場合は Bs の更新も呼び出されますか?
さらに、コードに単純な session.save(A) しかなく、冗長な B が生成されないことがわかりました。私が間違っている?これは可能ですか?
よろしく
更新:古い B の場合、古い B のインスタンスがセッションにアタッチされ、DBId が正しく設定されます。