2013-10-04 75 views
0

你能给我一个在java中的示例代码,如何正确使用休眠会话?我想要一个控制器类来处理所有的休眠操作(获取,更新,删除)。如何使用休眠会话处理

private void addPersonToEvent(Long personId, Long eventId) { 
    Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
    session.beginTransaction(); 

    Person aPerson = (Person) session.load(Person.class, personId); 
    Event anEvent = (Event) session.load(Event.class, eventId); 
    aPerson.getEvents().add(anEvent); 

    session.getTransaction().commit(); 
} 

这是正确的方法吗?如何正确处理异常和回滚以避免连接池错误,如果连接在异常后没有正确关闭,可能会如何?

非常感谢您

+0

尝试并捕获异常..如果异常发生然后transaction.rollback – nachokk

+1

如果只有它被记录下来......等等! http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html_single/#transactions-demarcation-nonmanaged –

+0

after the session.close()in finally block? – Benni

回答

0

我想一个控制器类来处理所有休眠操作(读取, 更新,删除)。

您应该有一个超类来处理所有常见操作(取,更新,删除)。超级应该是这样的:

public abstract class AbstractFacade<T> { 
    private Class<T> entityClass; 

    public AbstractFacade(Class<T> entityClass) { 
     this.entityClass = entityClass; 
    } 
    public void create(T entity) { 
    getSession().save(entity); 
    } 

    public void edit(T entity) { 
    getSession().merge(entity); 
    } 

    public void remove(T entity) { 
    getSession().remove(entity); 
    } 

    public T find(Object id) { 
    return getEntityManager().find(entityClass, id); 
    } 
}