2013-10-04 7 views
0

Можете ли вы дать мне пример кода в java, как правильно использовать сеанс hibernate? Я хочу, чтобы один класс контроллера обрабатывал все операции hibernate (выборка, обновление, удаление).Как использовать обработку сеанса спящего режима

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

после этого session.close() в блоке finally? – 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); 
    } 
} 
Смежные вопросы