(no commit message)
[utils] / security / impl / src / main / java / org / wamblee / usermgt / jpa / JpaGroupSet.java
index 1a9be6f217d8008ad20b4b339c716f4bff952545..b9db23975f748f71e3124eb7a45b5d4c8a18bd7b 100644 (file)
@@ -7,14 +7,15 @@ import java.util.TreeSet;
 import javax.persistence.EntityManager;
 import javax.persistence.TypedQuery;
 
+import org.wamblee.persistence.JpaMergeSupport;
 import org.wamblee.usermgt.Group;
 import org.wamblee.usermgt.GroupSet;
 
 public class JpaGroupSet implements GroupSet {
-    
-    private EntityManager em; 
-    
-    public JpaGroupSet(EntityManager aEm) { 
+
+    private EntityManager em;
+
+    public JpaGroupSet(EntityManager aEm) {
         em = aEm;
     }
 
@@ -30,12 +31,13 @@ public class JpaGroupSet implements GroupSet {
 
     @Override
     public boolean contains(Group aGroup) {
-           return find(aGroup.getName()) != null;  
+        return find(aGroup.getName()) != null;
     }
 
     @Override
     public Group find(String aName) {
-        TypedQuery<Group> query = em.createNamedQuery(Group.QUERY_FIND_BY_NAME, Group.class);
+        TypedQuery<Group> query = em.createNamedQuery(Group.QUERY_FIND_BY_NAME,
+            Group.class);
         query.setParameter(Group.NAME_PARAM, aName);
         List<Group> groups = query.getResultList();
         if (groups.size() > 1) {
@@ -52,21 +54,29 @@ public class JpaGroupSet implements GroupSet {
     @Override
     public void groupModified(Group aGroup) {
         assert aGroup.getPrimaryKey() != null;
-        em.merge(aGroup);
+        Group merged = em.merge(aGroup);
+        // Need to flush so that version of the merged instance is updated so we
+        // can use
+        // the updated version in the original group passed in. That allows the
+        // same
+        // group object to continue to be used as a detached object.
+        em.flush();
+        JpaMergeSupport.merge(merged, aGroup);
     }
 
     @Override
     public Set<Group> list() {
-        List<Group> groups = em.createNamedQuery(Group.QUERY_ALL_GROUPS, Group.class).getResultList();
+        List<Group> groups = em.createNamedQuery(Group.QUERY_ALL_GROUPS,
+            Group.class).getResultList();
         Set<Group> res = new TreeSet<Group>(groups);
-        return res; 
+        return res;
     }
 
     @Override
     public boolean remove(Group aGroup) {
         Group group = find(aGroup.getName());
-        if ( group == null ) { 
-            return false; 
+        if (group == null) {
+            return false;
         }
         em.remove(group);
         return true;
@@ -74,7 +84,8 @@ public class JpaGroupSet implements GroupSet {
 
     @Override
     public int size() {
-        Long res = (Long)em.createNamedQuery(Group.QUERY_COUNT_GROUPS).getSingleResult();
+        Long res = (Long) em.createNamedQuery(Group.QUERY_COUNT_GROUPS)
+            .getSingleResult();
         return res.intValue();
     }
 }