<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 孤飛燕 閱讀(5194) 評論(0)  編輯  收藏 所屬分類: Hibernate||JPA

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


    網站導航:
     
    主站蜘蛛池模板: 特级毛片爽www免费版| 亚洲精品美女久久久久| 免费大黄网站在线看| 女人被男人躁的女爽免费视频| 日本在线高清免费爱做网站| 中文字幕免费高清视频| 久久国产精品成人片免费| 最近免费2019中文字幕大全| 97在线视频免费| 国产男女爽爽爽爽爽免费视频| 日韩中文字幕精品免费一区| 猫咪社区免费资源在线观看| 国产成人免费高清激情视频| 午夜dj免费在线观看| 国产免费观看黄AV片| 亚洲黄片毛片在线观看| 亚洲一区二区三区国产精品| 亚洲情侣偷拍精品| 亚洲国产另类久久久精品| 337p日本欧洲亚洲大胆色噜噜 | 亚洲成人免费电影| 四虎免费影院ww4164h| 影音先锋在线免费观看| 免费h黄肉动漫在线观看| 亚洲色偷拍区另类无码专区| 久久九九亚洲精品| 久久精品亚洲精品国产色婷 | 久久久久久亚洲精品| 亚洲欧洲国产精品久久| 亚洲色中文字幕在线播放| 国产精品亚洲天堂| 中文在线观看免费网站| 久久永久免费人妻精品下载| 在线观看无码AV网站永久免费| 日日AV拍夜夜添久久免费| 亚洲中文字幕视频国产| 亚洲伊人久久大香线蕉苏妲己| 亚洲综合无码一区二区痴汉| 日韩在线视频线视频免费网站| 可以免费观看的毛片| 免费a级毛片无码a∨蜜芽试看|