2016-07-04 5 views
1

私は、オブジェクトが切り離されているかどうかを内部的に判断する方法を探しています。冬眠のコードを見ようとしましたが、それを理解することはできません。しかし、私たちはプログラム内でオブジェクトが切り離されているかどうかを判断する方法について話しています。しかし、私が理解しようとしているのは、休止状態が切り離されたオブジェクトを内部的にどのように識別しているかです。この身分証明書を行う場面は?オブジェクトがデタッチ状態にあるかどうかを内部的に判断する方法

答えて

2

もちろん、エンティティが管理されている(つまり、現在のセッションにアタッチされている場合、そのセッションは切り離されません)。重要な部分は、一時的なもの(管理されていないエンティティインスタンス、まだデータベースに存在しないエンティティインスタンス)と分離されたエンティティ(つまり、管理されていないが、すでに存在すると考えられるエンティティデータベース)。

エンティティが切り離されているか一時的であるかを判断するアルゴリズムの主要部分はAbstractEntityPersister.isTransient()です。

基本的に、ヌル識別子またはヌルのオプティミスティックロックバージョン属性(つまり、@Versionでアノテーションされた属性)がある場合、それは一時的なものとみなされます。

他にも微妙な点がありますが、自動生成された識別子を使用し、識別子がnullでない場合、Hibernateはそれを分離エンティティと見なします。割り当てられた識別子を使用する場合は、データベースをチェックする必要があります(バージョン属性もない場合)。これは、自動生成された識別子を使用する別の理由です。

+0

この回答は私の疑問を解決しました。私がこれについて考え始めた唯一の理由は、自動生成された識別子と割り当てられた識別子のbeahviourに直面したときです。再度疑問を解決してくれてありがとう。 – Zulfi

関連する問題