class Dao { def sf; def Dao() { sf = SessionFactoryLocator.sessionFactory } def getCategories() { sf.currentSession .createQuery("from Category order by name") .list() } def getComments(int limit=10, int offset=0, sortType="date", sortDir="desc") { def hql = "from Comment" sortDir = sortDir.toLowerCase() if (sortDir != "asc" && sortDir != "desc") { throw new IllegalArgumentException("sortDir must be either 'asc' or 'desc' (currently '$sortDir')") } switch (sortType) { default /* date */: hql += " order by metaData.createDate $sortDir, id $sortDir" } sf.currentSession .createQuery(hql) .setFirstResult(offset) .setMaxResults(limit) .list() } def getEntries(int limit=10, int offset=0, sortType="date", sortDir="desc") { def hql = "from Entry" sortDir = sortDir.toLowerCase() if (sortDir != "asc" && sortDir != "desc") { throw new IllegalArgumentException("sortDir must be either 'asc' or 'desc' (currently '$sortDir')") } switch (sortType) { default /* date */: hql += " order by metaData.createDate $sortDir, id $sortDir" } sf.currentSession .createQuery(hql) .setFirstResult(offset) .setMaxResults(limit) .list() } def getEntryById(long id) { sf.currentSession.get(Entry.class, id) } def save(entity) { if (! entity.metaData) { entity.metaData = new MetaData() } else { entity.metaData.saved() } sf.currentSession.save(entity) } }