Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/IGroupingDAO.java =================================================================== diff -u -r55901923afea1cbd769d8daa05051aa050bb99b6 -r911e203f0e0a2756ad172bbe1c0baf5b1e3c7089 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/IGroupingDAO.java (.../IGroupingDAO.java) (revision 55901923afea1cbd769d8daa05051aa050bb99b6) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/IGroupingDAO.java (.../IGroupingDAO.java) (revision 911e203f0e0a2756ad172bbe1c0baf5b1e3c7089) @@ -30,12 +30,17 @@ public interface IGroupingDAO extends IBaseDAO { /** + * Get a grouping record from the database. Must return a "real" grouping object, not + * a CGLIB proxy object. + * * @param groupingID * @return Grouping populated Grouping object */ public Grouping getGroupingById(Long groupingID); /** + * Must return a "real" grouping object, not a CGLIB proxy object. + * * @param groupingUIID * @return Grouping populated Grouping object */ Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/GroupingDAO.java =================================================================== diff -u -r8400ef0b3bbf1aba57dd2250dca01f473a9fd93b -r911e203f0e0a2756ad172bbe1c0baf5b1e3c7089 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/GroupingDAO.java (.../GroupingDAO.java) (revision 8400ef0b3bbf1aba57dd2250dca01f473a9fd93b) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dao/hibernate/GroupingDAO.java (.../GroupingDAO.java) (revision 911e203f0e0a2756ad172bbe1c0baf5b1e3c7089) @@ -22,38 +22,55 @@ */ package org.lamsfoundation.lams.learningdesign.dao.hibernate; -import java.util.List; - +import org.lamsfoundation.lams.learningdesign.ChosenGrouping; import org.lamsfoundation.lams.learningdesign.Grouping; +import org.lamsfoundation.lams.learningdesign.RandomGrouping; import org.lamsfoundation.lams.learningdesign.dao.IGroupingDAO; +import org.springframework.dao.DataRetrievalFailureException; /** * @author Manpreet Minhas */ public class GroupingDAO extends BaseDAO implements IGroupingDAO { - private static final String TABLENAME ="lams_grouping"; + private static final String FIND_BY_UI_ID ="from "+Grouping.class.getName()+" g where g.groupingUIID=:UIID"; - private static final String FIND_BY_UI_ID ="from " + TABLENAME + - " in class " + Grouping.class.getName() + - " where grouping_ui_id=?"; - /** * @see org.lamsfoundation.lams.learningdesign.dao.interfaces.IGroupingDAO#getGroupingById(java.lang.Long) */ public Grouping getGroupingById(Long groupingID) { - return (Grouping)super.find(Grouping.class,groupingID); + Grouping grouping = (Grouping)super.find(Grouping.class,groupingID); + return getNonCGLibGrouping(grouping); } /** * @see org.lamsfoundation.lams.learningdesign.dao.IGroupingDAO#getGroupingByUIID(java.lang.Integer) */ public Grouping getGroupingByUIID(Integer groupingUIID) { - List list = this.getHibernateTemplate().find(FIND_BY_UI_ID,groupingUIID); - if(list!=null && list.size()>0) - return (Grouping)list.get(0); - else - return null; + if ( groupingUIID != null ) { + Grouping grouping = (Grouping) getSession() + .createQuery(FIND_BY_UI_ID) + .setInteger("UIID",groupingUIID.intValue()) + .uniqueResult(); + return getNonCGLibGrouping(grouping); + } + return null; } + /** we must return the real grouping, not a Hibernate proxy. So relook + * it up. This should be quick as it should be in the cache. + */ + private Grouping getNonCGLibGrouping(Grouping grouping) { + if ( grouping != null ) { + if ( grouping.isRandomGrouping() ) { + return (Grouping)super.find(RandomGrouping.class,grouping.getGroupingId()); + } else if ( grouping.isChosenGrouping() ) { + return (Grouping)super.find(ChosenGrouping.class,grouping.getGroupingId()); + } + throw new DataRetrievalFailureException("Unable to get grouping as the grouping type is unknown or missing. Grouping object is "+grouping); + } + return null; + } + + }