`
lingzantia
  • 浏览: 150063 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Hibernate的Lifecycle Validatable 和 Interceptor

    博客分类:
  • Java
阅读更多
    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
分享到:
评论

相关推荐

    configuration接口

    Lifecycle 和 Validatable 接口由持久化类来实现,而 Interceptor 接口不必由持久化类来实现。 7. 映射类型接口 Type 接口表示 Hibernate 映射类型,用于把域对象映射为数据库关系数据。Hibernate 为 Type 接口...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     11.1.2 Java时间和日期类型的Hibernate映射类型  11.1.3 Java大对象类型的Hibernate映射类型  11.1.4 JDK自带的个别Java类的Hibernate映射类型  11.1.5 使用Hibernate内置映射类型  11.2 客户化映射类型  ...

    Hibernate的高级操作

    - **Lifecycle与Validatable接口**:`Lifecycle`接口允许开发者指定对象创建、更新、删除等生命周期方法;`Validatable`接口允许在保存实体之前执行验证逻辑。 - **HibernateInterceptor**:这是一个非常灵活的机制...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     11.1.2 Java时间和日期类型的Hibernate映射类型  11.1.3 Java大对象类型的Hibernate映射类型  11.1.4 JDK自带的个别Java类的Hibernate映射类型  11.1.5 使用Hibernate内置映射类型  11.2 客户化映射类型  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     11.1.2 Java时间和日期类型的Hibernate映射类型  11.1.3 Java大对象类型的Hibernate映射类型  11.1.4 JDK自带的个别Java类的Hibernate映射类型  11.1.5 使用Hibernate内置映射类型  11.2 客户化映射类型  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     11.1.2 Java时间和日期类型的Hibernate映射类型  11.1.3 Java大对象类型的Hibernate映射类型  11.1.4 JDK自带的个别Java类的Hibernate映射类型  11.1.5 使用Hibernate内置映射类型  11.2 客户化映射类型  ...

    jsp hibernate 数据保存操作的原理

    3. **验证接口处理**:如果实体类实现了`Validatable`接口,Hibernate会执行`validate()`方法,对即将保存的对象进行校验。 4. **拦截器处理**:如果有配置的拦截器(Interceptor),`save()`方法会调用`...

Global site tag (gtag.js) - Google Analytics