com.gm.wine.util.HibernateUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.gm.wine.util.HibernateUtils.java

Source

//-------------------------------------------------------------------------
// Copyright (c) 2000-2010 Digital. All Rights Reserved.
//
// This software is the confidential and proprietary information of
// Digital
//
// Original author: qingang
//
//-------------------------------------------------------------------------
// LOOSOFT MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
// THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
// TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
// PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UFINITY SHALL NOT BE
// LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
// MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
//
// THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE
// CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE
// PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT
// NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE
// SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE
// SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE
// PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). UFINITY
// SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR
// HIGH RISK ACTIVITIES.
//-------------------------------------------------------------------------
package com.gm.wine.util;

import java.util.Collection;
import java.util.Iterator;

import org.springframework.util.Assert;
import org.springside.modules.utils.reflection.ReflectionUtils;

import com.gm.wine.entity.BaseEntity;

public class HibernateUtils {
    /**
     * ?ID?, ???.
     * 
     * ??????id,Hibernate??????id?????.
     * ???id??,??id??. ?ID,
     * ??cascade-save-or-update??.
     * 
     * @param srcObjects
     *            ??,.
     * @param checkedIds
     *            ?,ID.
     * @param clazz
     *            ?,IdEntity?
     */
    public static <T extends BaseEntity> void mergeByCheckedIds(final Collection<T> srcObjects,
            final Collection<Long> checkedIds, final Class<T> clazz) {

        // ?
        Assert.notNull(srcObjects, "scrObjects?");
        Assert.notNull(clazz, "clazz?");

        // ?, ???.
        if (checkedIds == null) {
            srcObjects.clear();
            return;
        }

        // ????,id?ID?.
        // ?,???id,?id???id.
        Iterator<T> srcIterator = srcObjects.iterator();
        try {

            while (srcIterator.hasNext()) {
                T element = srcIterator.next();
                Long id = element.getId();

                if (!checkedIds.contains(id)) {
                    srcIterator.remove();
                } else {
                    checkedIds.remove(id);
                }
            }

            // ID??id????,,id??.
            for (Long id : checkedIds) {
                T element = clazz.newInstance();
                element.setId(id);
                srcObjects.add(element);
            }
        } catch (Exception e) {
            throw ReflectionUtils.convertReflectionExceptionToUnchecked(e);
        }
    }
}