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

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

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

    孤燈野火
    暢想的天空
    posts - 2,comments - 4,trackbacks - 0
    1.在JPA的配置文件中properties中引入監聽器
                 <property name="hibernate.ejb.event.post-insert" value="com.core.util.PostSaveEventListener" />
                           <property name="hibernate.ejb.event.post-update" value="com.core.util.PostUpdateEventListiner" />
                <property name="hibernate.ejb.event.post-delete" value="com.core.util.PostDeleteEventListener" />

    當JPA操作完成后,自動調用PostSaveEventListener,PostUpdateEventListiner,PostDeleteEventListener方法,支持聯合主鍵取主鍵值,不支持外鍵更新,不支持屬性為集合的變化記錄,如需要外鍵更新可根據需要擴展,以下為save、update、delete三個操作類
    package com.core.util;

    import java.io.Serializable;
    import java.lang.reflect.Field;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;

    import org.hibernate.event.spi.PostInsertEvent;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    import com.unilogi.core.bean.LoginUserInfo;

    /**
     * 
     * <p>
     * PostSaveEventListener.
     * </p>
     * 
     * 
    @author liu_dawei
     
    */

    @SuppressWarnings(
    "rawtypes""unchecked""serial" })
    public class PostSaveEventListener extends org.hibernate.ejb.event.EJB3PostInsertEventListener {

        
    private static final Logger logger = LoggerFactory.getLogger(PostSaveEventListener.class);

        
    private static PostSaveEventListener instance = null;

        
    public static PostSaveEventListener getInstance() {

            
    if (null == instance) {

                instance 
    = new PostSaveEventListener();
            }

            
    return instance;
        }


        
    private enum OperationType {
            CREATE, UPDATE, DELETE
        }


        @Override
        
    public void onPostInsert(PostInsertEvent event) {

            
    try {
                Connection con 
    = event.getSession().connection();

                Map map 
    = getContent(event);

                postOperation(con, map, OperationType.CREATE.ordinal());
            }
     catch (Exception e) {
                logger.error(e.getMessage());
            }


        }


        
    /**
         * con: dataBase Connection map: result map
         * <p>
         * </p>
         * 
         * 
    @param con
         * 
    @param map
         * 
    @param operation
         * 
    @throws Exception
         
    */

        
    public void postOperation(Connection con, Map map, int operation) throws Exception {

            
    try {
                String tableName 
    = map.get("tableName"== null ? "" : map.get("tableName").toString();
                StringBuffer PKNameBuffer 
    = new StringBuffer();
                
    if (null != map.get("pkName")) {
                    List pkList 
    = (List) map.get("pkName");
                    
    for (int i = 0; i < pkList.size(); i++{
                        
    if (false == PKNameBuffer.toString().equals("")) {
                            PKNameBuffer.append(
    ",");
                        }

                        Map tempMap 
    = (Map) pkList.get(i);
                        Set tempsets 
    = tempMap.keySet();
                        Iterator it 
    = tempsets.iterator();
                        
    while (it.hasNext()) {
                            Object obj 
    = it.next();
                            PKNameBuffer.append(obj.toString()).append(
    "=").append(tempMap.get(obj));
                        }


                    }

                }


                String pkName 
    = PKNameBuffer.toString();

                con.setAutoCommit(
    false);

                String sql 
    = "insert into M_Data_Log(PK_Value, Description, Old_Value, New_Value, Operation_Type, Table_Name, User_Id,Update_Time, Data_Log_Id) "
                        
    + "values(?,?,?,?,?,?,?,CURRENT_TIMESTAMP, M_Data_LOG_SEQ.nextval)";

                PreparedStatement ps 
    = con.prepareStatement(sql);
                ps.setString(
    1, pkName);
                
    if (operation == OperationType.CREATE.ordinal()) {
                    ps.setString(
    2"save " + tableName);
                }

                
    if (operation == OperationType.UPDATE.ordinal()) {
                    ps.setString(
    2"update " + tableName);
                }

                
    if (operation == OperationType.DELETE.ordinal()) {
                    ps.setString(
    2"delete " + tableName);
                }


                ps.setString(
    3, map.get("previousproperty"== null ? "" : map.get("previousproperty").toString());
                ps.setString(
    4, map.get("afterproperty"== null ? "" : map.get("afterproperty").toString());
                ps.setLong(
    5, operation);
                ps.setString(
    6, tableName);

                LoginUserInfo loginUserInfo 
    = SessionInfoManager.getContextInstance(
                        MessageManager.getInstance().getHttpServletRequest()).getCurrentUser();

                ps.setInt(
                        
    7,
                        loginUserInfo 
    == null ? Integer.parseInt("0") : Integer.parseInt(String.valueOf(loginUserInfo
                                .getUserId())));

                ps.execute();
                con.commit();
                ps.close();
            }
     catch (Exception e) {

                
    if (null != con) {
                    
    try {
                        con.rollback();
                    }
     catch (SQLException e1) {
                        
    // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }

                }


                
    throw new Exception(e.getMessage());
            }
     finally {
                
    try {
                    
    if (null != con && con.isClosed() == false{
                        con.close();
                    }

                }
     catch (SQLException e) {
                    e.printStackTrace();
                }

            }


        }


        
    public Map getContent(PostInsertEvent event) throws IllegalArgumentException, IllegalAccessException,
                InstantiationException, ClassNotFoundException 
    {

            Map map 
    = new HashMap();

            
    // get table
            Serializable[] serializables = event.getPersister().getPropertySpaces();
            map.put(
    "tableName", serializables[0]);

            
    // get PK
            String identifierPropertyName = event.getPersister().getIdentifierPropertyName();

            Field[] tempFields 
    = event.getEntity().getClass().getDeclaredFields();
            
    for (int i = 0; i < tempFields.length; i++{
                
    if (tempFields[i].getName().equals(identifierPropertyName)) {
                    List tempList 
    = new ArrayList();
                    
    // if PK is Primitive
                    if (event.getPersister().getPropertyType(tempFields[i].getName()).isEntityType() == false{
                        Map tempMap 
    = new HashMap();
                        tempFields[i].setAccessible(
    true);
                        tempMap.put(tempFields[i].getName(), tempFields[i].get(event.getEntity()));
                        tempList.add(tempMap);
                    }
     else {
                        Class obj 
    = event.getId().getClass();
                        Field[] objFields 
    = obj.getDeclaredFields();
                        
    for (int j = 0; j < objFields.length; j++{
                            
    if (objFields[j].getName().equals("serialVersionUID")) {
                                
    continue;
                            }

                            objFields[j].setAccessible(
    true);
                            Map tempMap 
    = new HashMap();
                            tempMap.put(objFields[j].getName(), objFields[j].get(event.getId()));
                            tempList.add(tempMap);
                        }


                    }


                    map.put(
    "pkName", tempList);

                }

            }


            
    // get new value
            StringBuffer buffer = new StringBuffer();

            
    for (int i = 0; i < event.getState().length; i++{
                
    if (false == buffer.toString().equals("")) {
                    buffer.append(
    ",");
                }


                
    // if collection or entity
                if (event.getPersister().getPropertyType(event.getPersister().getPropertyNames()[i]).isCollectionType()
                        
    || event.getPersister().getPropertyType(event.getPersister().getPropertyNames()[i]).isEntityType()) {
                    
    continue;
                }


                buffer.append(event.getPersister().getPropertyNames()[i]).append(
    "=").append(event.getState()[i]);
            }


            map.put(
    "afterproperty", buffer.toString());

            
    return map;
        }


    }

    package com.core.util;

    import java.io.Serializable;
    import java.lang.reflect.Field;
    import java.sql.Connection;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    import org.hibernate.event.spi.PostUpdateEvent;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    /**
     * 
     * <p>
     * PostUpdateEventListiner.
     * </p>
     * 
     * 
    @author liu_dawei
     
    */

    @SuppressWarnings(
    "rawtypes""unchecked""serial" })
    public class PostUpdateEventListiner extends org.hibernate.ejb.event.EJB3PostUpdateEventListener {

        
    private static final Logger logger = LoggerFactory.getLogger(PostUpdateEventListiner.class);

        
    private enum OperationType {
            CREATE, UPDATE, DELETE
        }


        @Override
        
    public void onPostUpdate(PostUpdateEvent event) {

            
    try {
                Connection con 
    = event.getSession().connection();

                Map map 
    = getContent(event);

                PostSaveEventListener.getInstance().postOperation(con, map, OperationType.UPDATE.ordinal());
            }
     catch (Exception e) {
                logger.error(e.getMessage());
            }


        }


        
    public Map getContent(PostUpdateEvent event) throws IllegalArgumentException, IllegalAccessException,
                InstantiationException, ClassNotFoundException 
    {

            Map map 
    = new HashMap();

            
    // get table
            Serializable[] serializables = event.getPersister().getPropertySpaces();
            map.put(
    "tableName", serializables[0]);

            
    // get PK
            String identifierPropertyName = event.getPersister().getIdentifierPropertyName();

            Field[] tempFields 
    = event.getEntity().getClass().getDeclaredFields();
            
    for (int i = 0; i < tempFields.length; i++{
                
    if (tempFields[i].getName().equals(identifierPropertyName)) {
                    List tempList 
    = new ArrayList();
                    
    // if PK is Primitive
                    if (event.getPersister().getPropertyType(tempFields[i].getName()).isEntityType() == false{
                        Map tempMap 
    = new HashMap();
                        tempFields[i].setAccessible(
    true);
                        tempMap.put(tempFields[i].getName(), tempFields[i].get(event.getEntity()));
                        tempList.add(tempMap);
                    }
     else {
                        Class obj 
    = event.getId().getClass();
                        Field[] objFields 
    = obj.getDeclaredFields();
                        
    for (int j = 0; j < objFields.length; j++{
                            
    if (objFields[j].getName().equals("serialVersionUID")) {
                                
    continue;
                            }

                            objFields[j].setAccessible(
    true);
                            Map tempMap 
    = new HashMap();
                            tempMap.put(objFields[j].getName(), objFields[j].get(event.getId()));
                            tempList.add(tempMap);
                        }


                    }


                    map.put(
    "pkName", tempList);

                }

            }


            
    // get change date
            StringBuffer oldStateBuffer = new StringBuffer();
            StringBuffer newStateBuffer 
    = new StringBuffer();
            
    for (int i = 0; i < event.getState().length; i++{
                
    // after
                Object oldValue = event.getOldState()[i];
                
    // previous
                Object newValue = event.getState()[i];

                
    if ((null == oldValue && null != newValue)
                        
    || (null != oldValue && null == newValue)
                        
    || (null != oldValue && null != newValue && false == oldValue.toString()
                                .equals(newValue.toString()))) 
    {
                    
    if ((false == oldStateBuffer.toString().equals(""))) {
                        oldStateBuffer.append(
    ",");

                    }

                    
    if ((false == newStateBuffer.toString().equals(""))) {
                        newStateBuffer.append(
    ",");

                    }


                    
    // if collection or entity
                    if (event.getPersister().getPropertyType(event.getPersister().getPropertyNames()[i]).isCollectionType()
                            
    || event.getPersister().getPropertyType(event.getPersister().getPropertyNames()[i])
                                    .isEntityType()) 
    {
                        
    continue;
                    }


                    String propertyName 
    = event.getPersister().getPropertyNames()[i];
                    oldStateBuffer.append(propertyName).append(
    "=").append(oldValue);
                    newStateBuffer.append(propertyName).append(
    "=").append(newValue);

                }


            }

            map.put(
    "previousproperty", oldStateBuffer.toString());
            map.put(
    "afterproperty", newStateBuffer.toString());

            
    return map;

        }


    }

    package com.core.util;

    import java.io.Serializable;
    import java.lang.reflect.Field;
    import java.sql.Connection;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    import org.hibernate.ejb.event.EJB3PostDeleteEventListener;
    import org.hibernate.event.spi.PostDeleteEvent;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    /**
     * 
     * <p>
     * PostDeleteEventListener.
     * </p>
     * 
     * 
    @author liu_dawei
     
    */

    @SuppressWarnings(
    "serial")
    public class PostDeleteEventListener extends EJB3PostDeleteEventListener {

        
    private static final Logger logger = LoggerFactory.getLogger(PostDeleteEventListener.class);

        
    private enum OperationType {
            CREATE, UPDATE, DELETE
        }


        @SuppressWarnings(
    "rawtypes")
        @Override
        
    public void onPostDelete(PostDeleteEvent event) {

            
    try {
                Connection con 
    = event.getSession().connection();

                Map map 
    = getContent(event);

                PostSaveEventListener.getInstance().postOperation(con, map, OperationType.DELETE.ordinal());
            }
     catch (Exception e) {
                logger.error(e.getMessage());
            }


        }


        @SuppressWarnings(
    "rawtypes""unchecked" })
        
    public Map getContent(PostDeleteEvent event) throws IllegalArgumentException, IllegalAccessException,
                InstantiationException, ClassNotFoundException 
    {

            Map map 
    = new HashMap();

            
    // get table
            Serializable[] serializables = event.getPersister().getPropertySpaces();
            map.put(
    "tableName", serializables[0]);

            
    // get PK
            String identifierPropertyName = event.getPersister().getIdentifierPropertyName();

            Field[] tempFields 
    = event.getEntity().getClass().getDeclaredFields();
            
    for (int i = 0; i < tempFields.length; i++{
                
    if (tempFields[i].getName().equals(identifierPropertyName)) {
                    List tempList 
    = new ArrayList();
                    
    // if PK is Primitive
                    if (event.getPersister().getPropertyType(tempFields[i].getName()).isEntityType() == false{
                        Map tempMap 
    = new HashMap();
                        tempFields[i].setAccessible(
    true);
                        tempMap.put(tempFields[i].getName(), tempFields[i].get(event.getEntity()));
                        tempList.add(tempMap);
                    }
     else {
                        Class obj 
    = event.getId().getClass();
                        Field[] objFields 
    = obj.getDeclaredFields();
                        
    for (int j = 0; j < objFields.length; j++{
                            
    if (objFields[j].getName().equals("serialVersionUID")) {
                                
    continue;
                            }

                            objFields[j].setAccessible(
    true);
                            Map tempMap 
    = new HashMap();
                            tempMap.put(objFields[j].getName(), objFields[j].get(event.getId()));
                            tempList.add(tempMap);
                        }


                    }


                    map.put(
    "pkName", tempList);

                }

            }


            
    // get old value
            StringBuffer buffer = new StringBuffer();

            
    for (int i = 0; i < event.getDeletedState().length; i++{
                
    if (false == buffer.toString().equals("")) {
                    buffer.append(
    ",");
                }


                
    // if collection or entity
                if (event.getPersister().getPropertyType(event.getPersister().getPropertyNames()[i]).isCollectionType()
                        
    || event.getPersister().getPropertyType(event.getPersister().getPropertyNames()[i]).isEntityType()) {
                    
    continue;
                }


                buffer.append(event.getPersister().getPropertyNames()[i]).append(
    "=").append(event.getDeletedState()[i]);
            }


            map.put(
    "previousproperty", buffer.toString());

            
    return map;
        }


    }




     
    posted on 2012-11-01 11:28 孤飛燕 閱讀(5192) 評論(0)  編輯  收藏 所屬分類: Hibernate||JPA

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 最近高清中文字幕免费| 亚洲一区二区观看播放| 亚洲欧洲成人精品香蕉网| 四虎影在线永久免费观看| 亚洲日本VA午夜在线影院| 亚洲精品成人网久久久久久| 日韩免费视频一区| 美女被免费视频网站a国产 | 亚洲日本国产乱码va在线观看| 亚洲成a人片在线观看中文动漫| 亚洲av无码国产精品夜色午夜| 久久精品国产精品亚洲艾草网| 久久精品国产96精品亚洲| 亚洲综合日韩中文字幕v在线| 91亚洲国产成人久久精品网站| 亚洲精品午夜久久久伊人| 国产免费啪嗒啪嗒视频看看| 四虎1515hm免费国产| 亚洲精品国产综合久久一线| 国产亚洲精品成人AA片新蒲金| 亚洲av无码成h人动漫无遮挡| 亚洲爱情岛论坛永久| 亚洲一区二区三区久久久久| 一本色道久久88亚洲精品综合| 国产精品亚洲专区无码牛牛| 无遮挡免费一区二区三区| 一本色道久久综合亚洲精品蜜桃冫| 亚洲国产一区二区三区在线观看| 处破女第一次亚洲18分钟| 国产精品九九久久免费视频| 亚在线观看免费视频入口| 4hu四虎最新免费地址| 国产成人aaa在线视频免费观看 | 亚洲AⅤ男人的天堂在线观看| 免费的黄网站男人的天堂| 亚洲欧美日韩一区二区三区在线| 阿v免费在线观看| 999zyz**站免费毛片| 青青青国产在线观看免费网站| 国产在线19禁免费观看国产| 亚洲中文久久精品无码ww16|