1

私が見ている直感に反する休止状態の動作を理解したいと思います。「フラッシュ」とは、休止状態のデータ構造がメモリ内にあり、DBに書き込む必要があることを意味するといつも思っていました。これは私が見ているものではありません。

次のインターセプターを作成しました。

public class FeedInterceptor extends EmptyInterceptor
{
    @Override
    public void postFlush(Iterator entities)
    {
          System.out.println("postFlush");          
    }
}

私のApplicationContextに登録しました

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
   <property name="entityInterceptor">
      <bean class="interceptor.FeedInterceptor"/>
   </property>
</bean>

しかし、奇妙なことに、DAOからDBから取得したすべての行について、コンソールに「postFlush」が書き込まれています。

Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("from Feed feed");
query.list();

何故ですか?

4

1 に答える 1

4

Hibernateがセッションをフラッシュしないと仮定すると、次のような状況になる可能性があります。

Person p = new Person();
p.setName("Pomario");
dao.create(p);
Person pomario = dao.findPersonByName("Pomario")
//pomario is null?

名前で人を見つけるとき、hibernateはデータベースにselectステートメントを発行します。前のステートメントを最初に送信しない場合、返される結果は、セッションで以前に行われた変更と一致しない可能性があります。ここでは、dababaseはcreateステートメントをまだ受信していないため、空の結果セットを返します。

于 2012-10-30T17:11:45.003 に答える