Lifecycle接口包含4个方法:
public boolean onSave(Session s) throws CallbackException;
public boolean onUpdate(Session s) throws CallbackException;
public boolean onDelete(Session s) throws CallbackException;
public void onLoad(Session s, Serializable id);
当在实现了该接口的Entity Class的Object上发生save()等事件时,会先调用相应的on方法,若返回
true或抛CallbackException时操作中止.
onLoad()方法在Object加载之后触发.
Validatable接口包含1个方法:
public void validate() throws ValidationFailure
,该方法在Object持久化之前调用,用于验证数据的正确性.
Interceptor接口用于取代上面2个接口:当pojo实现了接口之后,就不再是pojo,从而可能产生可移植的问题,hibernate提供Interceptor接口解决这个问题.Interceptor接口由具体的interceptor实现,并注入session使用.接口方法如下:
// 載入物件之前執行
public boolean onLoad(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) throws CallbackException;
// flush 時,如果發現有Dirty data,則執行此方法
public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) throws CallbackException;
// 儲存物件前執行
public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) throws CallbackException;
// 刪除物件前執行
public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) throws CallbackException;
// 在 flush 前執行
public void preFlush(Iterator entities) throws CallbackException;
// 在 flush 後執行
public void postFlush(Iterator entities) throws CallbackException;
// 判斷傳入的物件是否為 transient 狀態
public Boolean isTransient(Object entity);
// flush 前呼叫這個方法判斷 Dirty data
// 傳回Dirty data屬性索引或null採預設行為
public int[] findDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types);
// 手動建立實體物件,如果傳回 null,則使用預設的建構方法建立實例
public Object instantiate(String entityName, EntityMode entityMode, Serializable id) throws CallbackException;
// 傳回實體名稱
public String getEntityName(Object object) throws CallbackException;
// 取得實體物件
public Object getEntity(String entityName, Serializable id) throws CallbackException;
// beginTransaction() 之後執行
public void afterTransactionBegin(Transaction tx);
// 在事務完成前執行
public void beforeTransactionCompletion(Transaction tx);
// 在事務完成後執行
public void afterTransactionCompletion(Transaction tx);
Interceptor的使用:
SessionFactory.openSession(Interceptor)//每个session拥有自己的拦截器,不共享
Configuration.setInterceptor(Interceptor)//各个session共享此拦截器
参考文章:http://caterpillar.onlyfun.net/Gossip/HibernateGossip/Interceptor.html
http://blog.csdn.net/javacoffe/archive/2007/07/24/1705173.aspx
分享到:
相关推荐
Lifecycle 和 Validatable 接口由持久化类来实现,而 Interceptor 接口不必由持久化类来实现。 7. 映射类型接口 Type 接口表示 Hibernate 映射类型,用于把域对象映射为数据库关系数据。Hibernate 为 Type 接口...
11.1.2 Java时间和日期类型的Hibernate映射类型 11.1.3 Java大对象类型的Hibernate映射类型 11.1.4 JDK自带的个别Java类的Hibernate映射类型 11.1.5 使用Hibernate内置映射类型 11.2 客户化映射类型 ...
- **Lifecycle与Validatable接口**:`Lifecycle`接口允许开发者指定对象创建、更新、删除等生命周期方法;`Validatable`接口允许在保存实体之前执行验证逻辑。 - **HibernateInterceptor**:这是一个非常灵活的机制...
11.1.2 Java时间和日期类型的Hibernate映射类型 11.1.3 Java大对象类型的Hibernate映射类型 11.1.4 JDK自带的个别Java类的Hibernate映射类型 11.1.5 使用Hibernate内置映射类型 11.2 客户化映射类型 ...
11.1.2 Java时间和日期类型的Hibernate映射类型 11.1.3 Java大对象类型的Hibernate映射类型 11.1.4 JDK自带的个别Java类的Hibernate映射类型 11.1.5 使用Hibernate内置映射类型 11.2 客户化映射类型 ...
11.1.2 Java时间和日期类型的Hibernate映射类型 11.1.3 Java大对象类型的Hibernate映射类型 11.1.4 JDK自带的个别Java类的Hibernate映射类型 11.1.5 使用Hibernate内置映射类型 11.2 客户化映射类型 ...
3. **验证接口处理**:如果实体类实现了`Validatable`接口,Hibernate会执行`validate()`方法,对即将保存的对象进行校验。 4. **拦截器处理**:如果有配置的拦截器(Interceptor),`save()`方法会调用`...