/** * Logback: the reliable, generic, fast and flexible logging framework. * Copyright (C) 2006-2011, QOS.ch. All rights reserved. * * This program and the accompanying materials are dual-licensed under * either the terms of the Eclipse Public License v1.0 as published by * the Eclipse Foundation * * or (per the licensee's choosing) * * under the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation. */ package ch.qos.logback.audit.persistent; import java.util.ArrayList; import java.util.List; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.ScrollableResults; import org.hibernate.Session; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import ch.qos.logback.audit.AuditEvent; public class AuditEventDAO extends Persistor { final static String AE_CLASS = AuditEvent.class.getName(); static public AuditEvent findById(Long id) throws HibernateException { Session s = null; try { s = openSession(); return (AuditEvent) s.get(AuditEvent.class, id); } finally { close(s); } } @SuppressWarnings("unchecked") static public List<AuditEvent> findAll() throws HibernateException { Session s = null; try { s = openSession(); Criteria criteria = s.createCriteria(AuditEvent.class); return criteria.list(); } finally { close(s); } } // SELECT grp.subject_count, grp.subject FROM // (SELECT count(subject) as subject_count, subject from audit_event GROUP BY // subject) AS grp // ORDER BY grp.subject_count DESC; @SuppressWarnings("unchecked") static public List<Object[]> findMaxSubject() throws HibernateException { Session s = null; try { s = openSession(); // Query q = s.createQuery("select grp.sc, grp.sub from ( " + // // " select count(subject) as sub, subject from " // + AuditEvent.class.getName() + " GROUP BY subject) AS grp"); Query q = s.createQuery("select count(ae.subject), ae.subject FROM "+ AE_CLASS + " AS ae "+ "GROUP BY ae.subject ORDER BY count(ae.subject) desc"); ScrollableResults sr = q.scroll(); List<Object[]> l = new ArrayList<Object[]>(); int i = 0; while(sr.next()) { System.out.println(i++); Object[] oa = sr.get(); l.add(oa); } return l; } finally { close(s); } } @SuppressWarnings("unchecked") static public List<Object[]> findMaxObject() throws HibernateException { Session s = null; try { s = openSession(); //Query q = s.createQuery("select count(ae.subject), ae.subject FROM "+ AE_CLASS + " AS ae "+ //"GROUP BY ae.subject ORDER BY count(ae.subject) desc"); Criteria crit = s.createCriteria(AuditEvent.class); crit.setProjection(Projections.projectionList() .add(Projections.count("object").as("gcount")) .add(Projections.groupProperty("object")) ); crit.addOrder(Order.desc("gcount")); crit.setMaxResults(10); return crit.list(); } finally { close(s); } } }