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;
}
@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) {
@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;
@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();
}
}