⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ignoredirtypropertieslistener.java

📁 本系统有十分强大的功能
💻 JAVA
字号:
package org.opencustomer.framework.db.hibernate;

import java.util.Set;

import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.event.FlushEntityEvent;
import org.hibernate.event.def.DefaultFlushEntityEventListener;

public class IgnoreDirtyPropertiesListener extends DefaultFlushEntityEventListener {
    
    private static final long serialVersionUID = -4543093247808255749L;

    private final static Logger log = Logger.getLogger(IgnoreDirtyPropertiesListener.class);
    
    protected void dirtyCheck(FlushEntityEvent event) throws HibernateException {
        super.dirtyCheck(event);
        
        if ((event.getDirtyProperties() != null) && areOnlyIgnoredPropertiesDirty(event)) {
            //We only have dirty properties which should be ignored
            event.setDirtyProperties(null);

            if(log.isDebugEnabled())
                log.debug("suppress dirty for "+event.getEntity());
        }
    }
    
    private static boolean areOnlyIgnoredPropertiesDirty(FlushEntityEvent event) {
        boolean ignoreDirty = false;
        
        //Are there any properties to ignore configured for the current class?
        if (event.getEntity() instanceof IgnoreDirtyProperties) {
            Set<String> propsToIgnore = ((IgnoreDirtyProperties)event.getEntity()).getPropertiesToIgnoreOnDirtyCheck();
            int i = 0;
            String propName;
            String[] propertyNames = event.getEntityEntry().getPersister().getPropertyNames();
            
            ignoreDirty = true;
            
            //Loop through dirty properties
            while ((i < event.getDirtyProperties().length) && ignoreDirty) {
                propName = propertyNames[event.getDirtyProperties()[i++]];

                if (!propsToIgnore.contains(propName)) {
                    //This property is dirty but not on the ignore list
                    ignoreDirty = false;
                }
            }
        }
        
        return ignoreDirty;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -