package net.techreadiness.persistence.dao; import java.util.List; import javax.inject.Named; import javax.persistence.TypedQuery; import net.techreadiness.persistence.domain.ScopeDO; import net.techreadiness.persistence.domain.ScopeExtDO; import org.springframework.stereotype.Repository; @Repository @Named("scopeExtDAOImpl") public class ScopeExtDAOImpl extends BaseDAOImpl<ScopeExtDO> implements ScopeExtDAO, ExtDAO<ScopeDO, ScopeExtDO> { /** * This method is used to find the most relevant configuration item from the scope_ext table. By most relevant we mean to * say the closest(lowest) in the tree to the passed in scopeId. */ @Override public ScopeExtDO getLowestExistingConfigurationItem(Long scopeId, String entityCode) { StringBuilder sb = new StringBuilder(); sb.append("select se "); sb.append("from ScopeExtDO se, ScopeTreeDO tree, EntityFieldDO ef "); sb.append("where se.scope.scopeId = tree.ancestorScope.scopeId "); sb.append("and tree.scope.scopeId =:scopeId "); sb.append("and se.entityField.entityFieldId=ef.entityFieldId "); sb.append("and ef.code=:fieldCode "); sb.append("order by tree.ancestorDepth desc "); TypedQuery<ScopeExtDO> query = em.createQuery(sb.toString(), ScopeExtDO.class); query.setParameter("scopeId", scopeId); query.setParameter("fieldCode", entityCode); query.setMaxResults(1); query.setHint("org.hibernate.cacheable", Boolean.TRUE); return getSingleResult(query); } @Override public List<ScopeExtDO> getExtDOs(ScopeDO baseEntityWithExt) { return baseEntityWithExt.getScopeExts(); } @Override public ScopeExtDO getNew() { return new ScopeExtDO(); } @Override public ScopeExtDO getMostRecentlyUpdated(Long scopeId, Long viewDefId) { StringBuilder sb = new StringBuilder(); sb.append("select scopeExt from ScopeExtDO scopeExt where scopeExt.changeDate = "); sb.append("(select max(se.changeDate) from ScopeExtDO se "); sb.append("join se.entityField ef "); sb.append("join ef.viewDefFields vdf "); sb.append("where se.scope.scopeId = :scopeId and vdf.viewDef.viewDefId = :viewDefId)"); TypedQuery<ScopeExtDO> query = em.createQuery(sb.toString(), ScopeExtDO.class); query.setParameter("scopeId", scopeId); query.setParameter("viewDefId", viewDefId); query.setMaxResults(1); return getSingleResult(query); } }