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)?})???
????}
}

Instead of interface, I use Closure for callback

Blogged with Flock

Tags: