<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 165, comments - 198, trackbacks - 0, articles - 1
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    hbn 攔截器

    Posted on 2007-11-29 10:13 G_G 閱讀(1022) 評(píng)論(0)  編輯  收藏 所屬分類: hibernate
    攔截器
    package ?hbn.test.supper.Interceptor;

    import ?java.io.Serializable;
    import ?java.util.HashSet;
    import ?java.util.Iterator;
    import ?java.util.Set;

    import ?org.hibernate.CallbackException;
    import ?org.hibernate.EntityMode;
    import ?org.hibernate.Interceptor;
    import ?org.hibernate.Transaction;
    import ?org.hibernate.type.Type;

    public ? class ?TestInterceptor? implements ?Interceptor,Serializable{

    ????
    private ?Set?inserts? = ? new ?HashSet();
    ????
    private ?Set?updates? = ? new ?HashSet();
    ????
    ?? ?
    // Session初化一個(gè)持久對(duì)象 如果這方法中改變了對(duì)象屬性就返回true 否則null
    ???? public ? boolean ?onLoad(Object?entity,?Serializable?id,?Object[]?state,?String[]?propertyNames,?Type[]?types)? throws ?CallbackException?{
    ????
    ??? return ? false ;
    ????}
    ??? // Session flush()中檢查到臟數(shù)據(jù)是調(diào)用 如:tr.commit() ....
    ???? public ? boolean ?onFlushDirty(Object?entity,?Serializable?id,?Object[]?currentState,?Object[]?previousState,?String[]?propertyNames,?Type[]?types)? throws ?CallbackException?{
    ????????updates.add(entity);
    ????????
    return ? false ;
    ????}
    ???
    // Session Save() 當(dāng)修改了對(duì)象屬性返回true
    ???? public ? boolean ?onSave(Object?entity,?Serializable?id,?Object[]?state,?String[]?propertyNames,?Type[]?types)? throws ?CallbackException?{
    ????????
    ????????inserts.add(entity);
    ????????
    return ? false ;
    ????}
    ????
    // delete
    ???? public ? void ?onDelete(Object?entity,?Serializable?id,?Object[]?state,?String[]?propertyNames,?Type[]?types)? throws ?CallbackException?{
    ????}
    ? ?? //flush() 之前調(diào)用
    ???? public ? void ?preFlush(Iterator?entities)? throws ?CallbackException?{
    ????}
    ????
    // flush() 執(zhí)行SQL語(yǔ)句之后調(diào)用
    ???? public ? void ?postFlush(Iterator?entities)? throws ?CallbackException?{
    ????????
    ????????
    try ?{
    ????????????
    for (Iterator?it? = ?updates.iterator();it.hasNext();){
    ????????????????System.out.println(
    " update= " + ?it.next()?);????
    ????????????}
    ????????????
    for (Iterator?it? = ?inserts.iterator();it.hasNext();){
    ????????????????System.out.println(
    " insert " + ?it.next()?);????
    ????????????}
    ????????????
    ????????}?
    catch ?(Exception?e)?{
    ????????????e.printStackTrace();
    ????????}
    ????????
    ????}

    ????
    public ?Boolean?isTransient(Object?entity)?{
    ????????
    // ?TODO?Auto-generated?method?stub
    ???????? return ? null ;
    ????}
    ? ? //決定Session中那些對(duì)象是臟數(shù)據(jù) 如果null Session使用默認(rèn)處理臟數(shù)據(jù)
    ???? public ? int []?findDirty(Object?entity,?Serializable?id,?Object[]?currentState,?Object[]?previousState,?String[]?propertyNames,?Type[]?types)?{
    ???????? return ? null ;
    ????}

    ????
    // 當(dāng)Session構(gòu)造實(shí)體類對(duì)象前調(diào)用
    ???? public ?Object?instantiate(String?entityName,?EntityMode?entityMode,?Serializable?id)? throws ?CallbackException?{
    ???????? return ? null ;
    ????}

    ????
    public ?String?getEntityName(Object?object)? throws ?CallbackException?{
    ????????
    // ?TODO?Auto-generated?method?stub
    ???????? return ? null ;
    ????}

    ????
    public ?Object?getEntity(String?entityName,?Serializable?id)? throws ?CallbackException?{
    ????????
    // ?TODO?Auto-generated?method?stub
    ???????? return ? null ;
    ????}

    ????
    public ? void ?afterTransactionBegin(Transaction?tx)?{
    ????????
    // ?TODO?Auto-generated?method?stub
    ????????
    ????}

    ????
    public ? void ?beforeTransactionCompletion(Transaction?tx)?{
    ????????
    // ?TODO?Auto-generated?method?stub
    ????????
    ????}

    ????
    public ? void ?afterTransactionCompletion(Transaction?tx)?{
    ????????
    // ?TODO?Auto-generated?method?stub
    ????????
    ????}

    }

    測(cè)試

    package ?hbn.test.supper.Interceptor;

    import ?java.lang.reflect.Field;

    import ?org.hibernate.Session;
    import ?org.hibernate.SessionFactory;
    import ?org.hibernate.Transaction;

    import ?hbn.HibernateSessionFactory;
    import ?hbn.bean.T2oo;
    import ?junit.framework.TestCase;

    public ? class ?TestIC? extends ?TestCase?{
    ????
    private ?SessionFactory?sessionFactory;
    ????
    protected ? void ?setUp()? throws ?Exception?{
    ????????
    super .setUp();
    ????????
    // 利用java反射得到?HibernateSessionFactory?->
    ????????
    // private??static?org.hibernate.SessionFactory?sessionFactory;
    ????????
    // 要模擬?并發(fā)?要?HibernateSessionFactory?得出的?有?threadLocal?不行?
    ????????HibernateSessionFactory.currentSession();
    ????????HibernateSessionFactory.closeSession();
    ????????Field?field?
    = ?HibernateSessionFactory. class .getDeclaredField( " sessionFactory " );
    ????????field.setAccessible(
    true );
    ????????sessionFactory?
    = ?(SessionFactory)?field.get(HibernateSessionFactory. class );
    ????}
    ????
    ????
    public ? void ?testInc()? throws ?Exception?{
    ????????TestInterceptor?intx?
    = ? new ?TestInterceptor();
    ????????
    // 加載攔截器
    ????????Session?session? = ?sessionFactory.openSession(intx);
    ????????
    ????????Transaction?tr?
    = ?session.beginTransaction();
    ????????T2oo?t2?
    = ? new ?T2oo( 23 );
    ????????session.save(t2);
    ????????t2.setAvg(
    new ?Integer( 99 ));
    ????????tr.commit();
    ????}
    }
    結(jié)果
    Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
    Hibernate: update t2oo set version=?, avg=?, aid=? where id=? and version=?
    //攔截到的
    update=hbn.bean.T2oo@277
    inserthbn.bean.T2oo@277



    主站蜘蛛池模板: 亚洲国产成人精品无码区花野真一| 亚洲av一综合av一区| 亚洲欧美日韩综合俺去了| 四虎免费影院ww4164h| 亚洲视频在线观看免费视频| 久久免费国产视频| 久久夜色精品国产噜噜噜亚洲AV | 亚洲欧洲日韩国产一区二区三区| 久久免费视频99| 亚洲国产成人手机在线电影bd| 69xx免费观看视频| 亚洲AV一二三区成人影片| 69成人免费视频无码专区| 亚洲精品乱码久久久久蜜桃 | 亚洲精品无码成人片久久| 久久精品免费观看| 2022年亚洲午夜一区二区福利| 久久国内免费视频| 在线91精品亚洲网站精品成人| 亚洲日韩中文字幕日韩在线| a级毛片毛片免费观看久潮| 久久丫精品国产亚洲av| 无码专区永久免费AV网站| 特级毛片A级毛片100免费播放 | 一个人看的免费观看日本视频www| 中文字幕亚洲无线码a| 免费人妻无码不卡中文字幕系| 亚洲国产一区在线观看 | 亚洲高清无码在线观看| 免费国产99久久久香蕉| 7777久久亚洲中文字幕| 亚洲精品WWW久久久久久| 久久久久免费看成人影片| 亚洲Aⅴ在线无码播放毛片一线天| 亚洲一区二区视频在线观看| 在线成人爽a毛片免费软件| 精品成人一区二区三区免费视频| 亚洲国产精品成人久久| 成人片黄网站A毛片免费| XXX2高清在线观看免费视频| 亚洲国产美女精品久久|