读书人

Hibernate源码分析散记

发布时间: 2013-07-01 12:33:04 作者: rapoo

Hibernate源码分析杂记

最近在看hibernate在load entity过程中的操作, 包括为实体类做增强,自动flush,一级缓存,在这里记录一下,慢慢会继续更新。

?

DefaultLoadEventListener:

final PersistenceContext persistenceContext = event.getSession().getPersistenceContext();

StatefulPersistenceContext.proxiesByKey 缓存实体

?

DefaultLoadEventListener:

?

?

performExecutions中有如下调用,可以看到其根据session中保存的actionQueue进行处理,对action顺序进行重排:

session.getActionQueue().prepareActions();

session.getActionQueue().executeActions();

?

prepareAction调用保存的action的beforeExecutions方法,对action进行预处理

? 

executeActions则按顺序执行保存的action,实际调用的是action的execute方法:

? 

?

各种CRUD的action都实现了Executable的接口,该接口主要定义了execute()和beforeExecutions()方法,用于执行action前的一些处理操作和之后的实际操作。

action的一些继承层次如下:

public final class EntityInsertAction extends AbstractEntityInsertAction

public abstract class AbstractEntityInsertAction extends EntityAction

public abstract class EntityAction

implements Executable, Serializable, Comparable, AfterTransactionCompletionProcess

?

?

performExecutions(EventSource session) 中有这么一句:

session.getTransactionCoordinator().getJdbcCoordinator().flushEnding();

?

实现类是TransactionCoordinatorImpl, 其构造函数中:

?

?

一个查询的处理流程:

Servlet.processRequest->JdbcTransaction.beforeTransactionCommit->SessionImpl.managedFlush->SessinImpl.flush->DefaultFlushEventListener.onFlush

->AbstractFlushingEventListener.performExecutior->JdbcCoordinatorImpl.flushEnding

读书人网 >开源软件

热点推荐