2013-10-04 99 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); 
    } 
}