Hibernate.groovy
import
org.hibernate.cfg.Configuration
import org.hibernate.Session
import org.hibernate.SessionFactory
import org.hibernate.Transaction
import org.hibernate.tool.hbm2ddl.SchemaUpdate
class Hibernate {
def static sessionFactory
static {
try {
Configuration cfg = new Configuration()
cfg.configure()
new SchemaUpdate(cfg).execute( true , true )
sessionFactory = cfg.buildSessionFactory()
} catch (Exception e) {
e.printStackTrace()
}
}
Hibernate() {}
private Session getSession() {
return sessionFactory.openSession()
}
Object execute(closure) {
def s = getSession()
def tr = null
def result = null
try {
tr = s.beginTransaction()
result = closure.call(s)
tr.commit()
} catch (Exception e) {
e.printStackTrace()
if (tr != null ) {
tr.rollback()
}
} finally {
s.close()
}
return result
}
void saveOrUpdate(obj) {
def saveClosure = { s -> s.saveOrUpdate(obj) }
execute(saveClosure)
}
List executeQuery(hql) {
execute({ s -> s.createQuery(hql).list() })
}
List executeQuery(hql, parameters) {
def query = { s ->
def q = s.createQuery(hql)
if (parameters != null ) {
for (i in 0 ..parameters.size() - 1 ) {
q.setParameter(i, parameters[i])
}
}
q.list()
}
execute(query)
}
def get(clazz, id) {
return execute({ s -> s.get(clazz, id) })
}
void delete(obj) {
execute({ s -> s.delete(obj) })
}
}
import org.hibernate.Session
import org.hibernate.SessionFactory
import org.hibernate.Transaction
import org.hibernate.tool.hbm2ddl.SchemaUpdate
class Hibernate {
def static sessionFactory
static {
try {
Configuration cfg = new Configuration()
cfg.configure()
new SchemaUpdate(cfg).execute( true , true )
sessionFactory = cfg.buildSessionFactory()
} catch (Exception e) {
e.printStackTrace()
}
}
Hibernate() {}
private Session getSession() {
return sessionFactory.openSession()
}
Object execute(closure) {
def s = getSession()
def tr = null
def result = null
try {
tr = s.beginTransaction()
result = closure.call(s)
tr.commit()
} catch (Exception e) {
e.printStackTrace()
if (tr != null ) {
tr.rollback()
}
} finally {
s.close()
}
return result
}
void saveOrUpdate(obj) {
def saveClosure = { s -> s.saveOrUpdate(obj) }
execute(saveClosure)
}
List executeQuery(hql) {
execute({ s -> s.createQuery(hql).list() })
}
List executeQuery(hql, parameters) {
def query = { s ->
def q = s.createQuery(hql)
if (parameters != null ) {
for (i in 0 ..parameters.size() - 1 ) {
q.setParameter(i, parameters[i])
}
}
q.list()
}
execute(query)
}
def get(clazz, id) {
return execute({ s -> s.get(clazz, id) })
}
void delete(obj) {
execute({ s -> s.delete(obj) })
}
}
Instead of interface, I use Closure for callback
Blogged with Flock
Tags: hibernategroovy