La próximo clase demuestra algunos de los tipos de cosas que podemos realizar con estas clases utilizando Hibernate

package eg

import java.util.ArrayList
import java.util.Calendar
import java.util.Iterator
import java.util.List

import org.hibernate.HibernateException
import org.hibernate.Query
import org.hibernate.Session
import org.hibernate.SessionFactory
import org.hibernate.Transaction
import org.hibernate.cfg.Configuration
import org.hibernate.tool.hbm2ddl.SchemaExport

public class BlogMain {

private SessionFactory _sessions

public void configure() throws HibernateException {
_sessions = new Configuration()
.addClass(Blog.class)
.addClass(BlogItem.class)
.buildSessionFactory()
}

public void exportTables() throws HibernateException {
Configuration cfg = new Configuration()
.addClass(Blog.class)
.addClass(BlogItem.class)
new SchemaExport(cfg).create(true true)
}

public Blog createBlog(String name) throws HibernateException {

Blog blog = new Blog()
blog.setName(name)
blog.setItems( new ArrayList() )

Session session = _sessions.openSession()
Transaction tx = null
try {
tx = session.beginTransaction()
session.persist(blog)
tx.commit()
}
catch (HibernateException he) {
if (tx!=null) tx.rollback()
throw he
}
finally {
session.close()
}
return blog
}

public BlogItem createBlogItem(Blog blog String title String text)
throws HibernateException {

BlogItem item = new BlogItem()
item.setTitle(title)
item.setText(text)
item.setBlog(blog)
item.setDatetime( Calendar.getInstance() )
blog.getItems().add(item)

Session session = _sessions.openSession()
Transaction tx = null
try {
tx = session.beginTransaction()
session.update(blog)
tx.commit()
}
catch (HibernateException he) {
if (tx!=null) tx.rollback()
throw he
}
finally {
session.close()
}
return item
}

public BlogItem createBlogItem(Long blogid String title String text)
throws HibernateException {

BlogItem item = new BlogItem()
item.setTitle(title)
item.setText(text)
item.setDatetime( Calendar.getInstance() )

Session session = _sessions.openSession()
Transaction tx = null
try {
tx = session.beginTransaction()
Blog blog = (Blog) session.load(Blog.class blogid)
item.setBlog(blog)
blog.getItems().add(item)
tx.commit()
}
catch (HibernateException he) {
if (tx!=null) tx.rollback()
throw he
}
finally {
session.close()
}
return item
}

public void updateBlogItem(BlogItem item String text)
throws HibernateException {

item.setText(text)

Session session = _sessions.openSession()
Transaction tx = null
try {
tx = session.beginTransaction()
session.update(item)
tx.commit()
}
catch (HibernateException he) {
if (tx!=null) tx.rollback()
throw he
}
finally {
session.close()
}
}

public void updateBlogItem(Long itemid String text)
throws HibernateException {

Session session = _sessions.openSession()
Transaction tx = null
try {
tx = session.beginTransaction()
BlogItem item = (BlogItem) session.load(BlogItem.class itemid)
item.setText(text)
tx.commit()
}
catch (HibernateException he) {
if (tx!=null) tx.rollback()
throw he
}
finally {
session.close()
}
}

public List listAllBlogNamesAndItemCounts(int max)
throws HibernateException {

Session session = _sessions.openSession()
Transaction tx = null
List result = null
try {
tx = session.beginTransaction()
Query q = session.createQuery(
select blog.id blog.name count(blogItem) +
from Blog as blog +
left outer join blog.items as blogItem +
group by blog.name blog.id +
order by max(blogItem.datetime)
)
q.setMaxResults(max)
result = q.list()
tx.commit()
}
catch (HibernateException he) {
if (tx!=null) tx.rollback()
throw he
}
finally {
session.close()
}
return result
}

public Blog getBlogAndAllItems(Long blogid)
throws HibernateException {

Session session = _sessions.openSession()
Transaction tx = null
Blog blog = null
try {
tx = session.beginTransaction()
Query q = session.createQuery(
from Blog as blog +
left outer join fetch blog.items +
where blog.id = blogid
)
q.setParameter(blogid blogid)
blog = (Blog) q.uniqueResult()
tx.commit()
}
catch (HibernateException he) {
if (tx!=null) tx.rollback()
throw he
}
finally {
session.close()
}
return blog
}

public List listBlogsAndRecentItems() throws HibernateException {

Session session = _sessions.openSession()
Transaction tx = null
List result = null
try {
tx = session.beginTransaction()
Query q = session.createQuery(
from Blog as blog +
inner join blog.items as blogItem +
where blogItem.datetime
)

Calendar cal = Calendar.getInstance()
cal.roll(Calendar.MONTH false)
q.setCalendar(minDate cal)

result = q.list()
tx.commit()
}
catch (HibernateException he) {
if (tx!=null) tx.rollback()
throw he
}
finally {
session.close()
}
return result
}
}