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: hibernategroovy