分離オブジェクトをキャッシュされた: Hibernateは、私は、多かれ少なかれ働く私自身のオブジェクト・キャッシュを使用してきた
- でオブジェクトストアを
- 別のセッションで同じオブジェクトが再び要求された場合、同じオブジェクトを再度使用します。
- オブジェクトは非常に稀にしか変更されず、極端に頻繁に使用されます(読み取り専用)。何かがデータベースで変更された場合、私はオブジェクトキャッシュをクリアするフックを持っています。
これはほとんどの状況ではうまくいきますが、場合によっては望ましくないデータベースヒットを引き起こします。私はオブジェクトを作成
- (新しいカー())
- は、このオブジェクトにキャッシュされたオブジェクトを割り当てます:car.setOwner(cache.lookup( "ピート"))(この私は、次のような状況を認識していますオブジェクトは、その後、私はオブジェクト
は、この時点で、Hibernateはそのオブジェクトが「dettached」とNULLIFYの間にそれから、そのオブジェクトをフェッチチェックされていることを、実現保存
これを避ける方法はありますか?データベースにアクセスせずにオブジェクトをセッションに再接続することはできますか? "私はhiberanteを信頼して、これは有効なオブジェクトです、それを覚えてください"。
以下、この状況のスタックトレースを添付します。
休止バージョン:3.3.2.GA
乾杯 レト
org.hibernate.jdbc.util.SQLStatementLogger.logStatement(SQLStatementLogger.java:115)
org.hibernate.jdbc.AbstractBatcher.log(AbstractBatcher.java:444)
org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:511)
org.hibernate.jdbc.AbstractBatcher.prepareSelectStatement(AbstractBatcher.java:145)
org.hibernate.persister.entity.AbstractEntityPersister.getDatabaseSnapshot(AbstractEntityPersister.java:1034)
org.hibernate.engine.StatefulPersistenceContext.getDatabaseSnapshot(StatefulPersistenceContext.java:269)
org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:212)
org.hibernate.engine.ForeignKeys$Nullifier.isNullifiable(ForeignKeys.java:160)
org.hibernate.engine.ForeignKeys$Nullifier.nullifyTransientReferences(ForeignKeys.java:92)
org.hibernate.engine.ForeignKeys$Nullifier.nullifyTransientReferences(ForeignKeys.java:70)
org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:311)
org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:144)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
sun.reflect.GeneratedMethodAccessor271.invoke (Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
マージもdatabseにヒットしますか?答えのために – reto