Java tutorial
//------------------------------------------------------------------------- // 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); } } }