X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=support%2Fspring%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fpersistence%2Fhibernate%2FHibernateSupport.java;h=ef0ac40af32811ef8d7b8bf6c2e640a6a1a2f86b;hb=8de36ff0206c996baf3ee4adc3e2293b12ff5f39;hp=aa52f0d4dd3f88e0ff7cff7b0b9c04ed0526437a;hpb=ddd261f331280640c5b53c7128230b629ebcd268;p=utils diff --git a/support/spring/src/main/java/org/wamblee/persistence/hibernate/HibernateSupport.java b/support/spring/src/main/java/org/wamblee/persistence/hibernate/HibernateSupport.java index aa52f0d4..ef0ac40a 100644 --- a/support/spring/src/main/java/org/wamblee/persistence/hibernate/HibernateSupport.java +++ b/support/spring/src/main/java/org/wamblee/persistence/hibernate/HibernateSupport.java @@ -31,20 +31,16 @@ import java.util.List; import java.util.Map; import java.util.Set; - /** - * Extension of {@link - * org.springframework.orm.hibernate.support.HibernateDaoSupport}. - * + * Extension of + * {@link org.springframework.orm.hibernate.support.HibernateDaoSupport}. + * * @author Erik Brakkee */ public class HibernateSupport extends HibernateDaoSupport { - /** - * DOCUMENT ME! - */ private static final Log LOG = LogFactory.getLog(HibernateSupport.class); -/** + /** * Constructs the object. * */ @@ -53,26 +49,29 @@ public class HibernateSupport extends HibernateDaoSupport { } /** - * Performes a hibernate Session.merge() and updates - * the object with the correct primary key and version. This is an - * extension to the hibernate merge operation because hibernate itself - * leaves the object passed to merge untouched. Use this method with - * extreme caution since it will recursively load all objects that the - * current object has relations with and for which cascade="merge" was - * specified in the Hibernate mapping file. - * - * @param aPersistent Object to merge. + * Performes a hibernate Session.merge() and updates the object + * with the correct primary key and version. This is an extension to the + * hibernate merge operation because hibernate itself leaves the object + * passed to merge untouched. Use this method with extreme caution since it + * will recursively load all objects that the current object has relations + * with and for which cascade="merge" was specified in the Hibernate mapping + * file. + * + * @param aPersistent + * Object to merge. */ public void merge(Persistent aPersistent) { merge(getHibernateTemplate(), aPersistent); } /** - * As {@link #merge(Persistent)} but with a given template. This - * method can be accessed in a static way. - * - * @param aTemplate Hibernate template - * @param aPersistent Object to merge. + * As {@link #merge(Persistent)} but with a given template. This method can + * be accessed in a static way. + * + * @param aTemplate + * Hibernate template + * @param aPersistent + * Object to merge. */ public static void merge(HibernateTemplate aTemplate, Persistent aPersistent) { Persistent merged = (Persistent) aTemplate.merge(aPersistent); @@ -80,18 +79,20 @@ public class HibernateSupport extends HibernateDaoSupport { } /** - * Copies primary keys and version from the result of the merged to - * the object that was passed to the merge operation. It does this by - * traversing the properties of the object. It copies the primary key and - * version for objects that implement {@link Persistent} and applies the - * same rules to objects in maps and sets as well (i.e. recursively). - * - * @param aPersistent Object whose primary key and version are to be set. - * @param aMerged Object that was the result of the merge. - * @param aProcessed List of already processed Persistent objects of the - * persistent part. - * - * @throws RuntimeException DOCUMENT ME! + * Copies primary keys and version from the result of the merged to the + * object that was passed to the merge operation. It does this by traversing + * the properties of the object. It copies the primary key and version for + * objects that implement {@link Persistent} and applies the same rules to + * objects in maps and sets as well (i.e. recursively). + * + * @param aPersistent + * Object whose primary key and version are to be set. + * @param aMerged + * Object that was the result of the merge. + * @param aProcessed + * List of already processed Persistent objects of the persistent + * part. + * */ public static void processPersistent(Persistent aPersistent, Persistent aMerged, List aProcessed) { @@ -100,8 +101,8 @@ public class HibernateSupport extends HibernateDaoSupport { } if ((aPersistent == null) || (aMerged == null)) { - throw new RuntimeException("persistent or merged object is null '" - + aPersistent + "'" + " '" + aMerged + "'"); + throw new RuntimeException("persistent or merged object is null '" + + aPersistent + "'" + " '" + aMerged + "'"); } ObjectElem elem = new ObjectElem(aPersistent); @@ -114,10 +115,10 @@ public class HibernateSupport extends HibernateDaoSupport { LOG.debug("Setting pk/version on " + aPersistent + " from " + aMerged); - if ((aPersistent.getPrimaryKey() != null) - && !aMerged.getPrimaryKey().equals(aPersistent.getPrimaryKey())) { - LOG.error("Mismatch between primary key values: " + aPersistent - + " " + aMerged); + if ((aPersistent.getPrimaryKey() != null) && + !aMerged.getPrimaryKey().equals(aPersistent.getPrimaryKey())) { + LOG.error("Mismatch between primary key values: " + aPersistent + + " " + aMerged); } else { aPersistent.setPersistedVersion(aMerged.getPersistedVersion()); aPersistent.setPrimaryKey(aMerged.getPrimaryKey()); @@ -131,26 +132,29 @@ public class HibernateSupport extends HibernateDaoSupport { try { if (Set.class.isAssignableFrom(returnType)) { - Set merged = (Set) getter.invoke(aMerged); + Set merged = (Set) getter.invoke(aMerged); Set persistent = (Set) getter.invoke(aPersistent); processSet(persistent, merged, aProcessed); } else if (List.class.isAssignableFrom(returnType)) { - List merged = (List) getter.invoke(aMerged); + List merged = (List) getter.invoke(aMerged); List persistent = (List) getter.invoke(aPersistent); processList(persistent, merged, aProcessed); } else if (Map.class.isAssignableFrom(returnType)) { - Map merged = (Map) getter.invoke(aMerged); + Map merged = (Map) getter.invoke(aMerged); Map persistent = (Map) getter.invoke(aPersistent); processMap(persistent, merged, aProcessed); } else if (Persistent.class.isAssignableFrom(returnType)) { - Persistent merged = (Persistent) getter.invoke(aMerged); - Persistent persistent = (Persistent) getter.invoke(aPersistent); + Persistent merged = (Persistent) getter.invoke(aMerged); + Persistent persistent = (Persistent) getter + .invoke(aPersistent); processPersistent(persistent, merged, aProcessed); - } else if (returnType.isArray() - && Persistent.class.isAssignableFrom( - returnType.getComponentType())) { - Persistent[] merged = (Persistent[]) getter.invoke(aMerged); - Persistent[] persistent = (Persistent[]) getter.invoke(aPersistent); + } else if (returnType.isArray() && + Persistent.class.isAssignableFrom(returnType + .getComponentType())) { + Persistent[] merged = (Persistent[]) getter + .invoke(aMerged); + Persistent[] persistent = (Persistent[]) getter + .invoke(aPersistent); for (int i = 0; i < persistent.length; i++) { processPersistent(persistent[i], merged[i], @@ -168,21 +172,23 @@ public class HibernateSupport extends HibernateDaoSupport { /** * Process the persistent objects in the collections. - * - * @param aPersistent Collection in the original object. - * @param aMerged Collection as a result of the merge. - * @param aProcessed List of processed persistent objects. - * - * @throws RuntimeException DOCUMENT ME! + * + * @param aPersistent + * Collection in the original object. + * @param aMerged + * Collection as a result of the merge. + * @param aProcessed + * List of processed persistent objects. + * */ public static void processList(List aPersistent, List aMerged, List aProcessed) { - Object[] merged = aMerged.toArray(); + Object[] merged = aMerged.toArray(); Object[] persistent = aPersistent.toArray(); if (merged.length != persistent.length) { - throw new RuntimeException("Array sizes differ " + merged.length - + " " + persistent.length); + throw new RuntimeException("Array sizes differ " + merged.length + + " " + persistent.length); } for (int i = 0; i < merged.length; i++) { @@ -197,18 +203,20 @@ public class HibernateSupport extends HibernateDaoSupport { /** * Process the persistent objects in sets. - * - * @param aPersistent Collection in the original object. - * @param aMerged Collection as a result of the merge. - * @param aProcessed List of processed persistent objects. - * - * @throws RuntimeException DOCUMENT ME! + * + * @param aPersistent + * Collection in the original object. + * @param aMerged + * Collection as a result of the merge. + * @param aProcessed + * List of processed persistent objects. + * */ public static void processSet(Set aPersistent, Set aMerged, List aProcessed) { if (aMerged.size() != aPersistent.size()) { - throw new RuntimeException("Array sizes differ " + aMerged.size() - + " " + aPersistent.size()); + throw new RuntimeException("Array sizes differ " + aMerged.size() + + " " + aPersistent.size()); } for (Object merged : aMerged) { @@ -226,18 +234,20 @@ public class HibernateSupport extends HibernateDaoSupport { /** * Process the Map objects in the collections. - * - * @param aPersistent Collection in the original object. - * @param aMerged Collection as a result of the merge. - * @param aProcessed List of processed persistent objects. - * - * @throws RuntimeException DOCUMENT ME! + * + * @param aPersistent + * Collection in the original object. + * @param aMerged + * Collection as a result of the merge. + * @param aProcessed + * List of processed persistent objects. + * */ public static void processMap(Map aPersistent, Map aMerged, List aProcessed) { if (aMerged.size() != aPersistent.size()) { - throw new RuntimeException("Sizes differ " + aMerged.size() + " " - + aPersistent.size()); + throw new RuntimeException("Sizes differ " + aMerged.size() + " " + + aPersistent.size()); } Set keys = aMerged.keySet(); @@ -247,7 +257,7 @@ public class HibernateSupport extends HibernateDaoSupport { throw new RuntimeException("Key '" + key + "' not found"); } - Object mergedValue = aMerged.get(key); + Object mergedValue = aMerged.get(key); Object persistentValue = aPersistent.get(key); if (mergedValue instanceof Persistent) { @@ -263,11 +273,11 @@ public class HibernateSupport extends HibernateDaoSupport { } /** - * This class provided an equality operation based on the object - * reference of the wrapped object. This is required because we cannto - * assume that the equals operation has any meaning for different types of - * persistent objects. This allows us to use the standard collection - * classes for detecting cyclic dependences and avoiding recursion. + * This class provided an equality operation based on the object reference + * of the wrapped object. This is required because we cannto assume that the + * equals operation has any meaning for different types of persistent + * objects. This allows us to use the standard collection classes for + * detecting cyclic dependences and avoiding recursion. */ private static final class ObjectElem { private Object object;