私自身の質問に答える。
パブリックAPIでこれが可能であるとは思われません。あなたには、いくつかのチーズを容認して喜んでいる場合は、あなたが以下の
SessionImplementor sessionImplementor = ((SessionImplementor)session);
EntityPersister entityPersister = sessionImplementor.getFactory().getEntityPersister(clazz.getName());
PersistenceContext persistenceContext = sessionImplementor.getPersistenceContext();
EntityKey entityKey = new EntityKey(id, entityPersister, EntityMode.POJO);
Object entity = persistenceContext.getEntity(entityKey);
if (entity != null)
return entity;
entity = persistenceContext.getProxy(entityKey);
if (entity != null)
return entity;
return null;
を行うことができますこれは、内部的に変更された場合ので、将来的に動作しないことがあります休止状態の内部APIに依存しています。
興味があるだけ - なぜあなたは、与えられた識別子を持つオブジェクトがセッションにあるかどうかを知る必要がありますか? 'get(id)'を実行して、オブジェクトがすでにSessionに入っている場合、Hibernateはそのインスタンスを返し、それを再クエリしないという事実に頼ることはできませんか? –
このインスタンスでは、いくつかのカスタムキャッシュとの対話を休止させようとしていますが、非常に特定のインスタンスでのみ動作します。ほとんどの場合、データベースにアクセスするデフォルトの動作に満足していますので、 、キャッシュからロードしない場合。キーは、多対1の参照を持つ他のオブジェクトからの参照が存在する可能性があるため、セッション内の何かを妨害することはできません。 –
@MikeQあなたはIdentityMapの仕組みについて絶対に正しかったので、私の答えは削除されました。 – Marcelo