Hibernate+GWTP: сессия через многократные запросы

Я пытаюсь создать подобную волшебнику регистрацию, где у меня есть многократные страницы с каждым, которого форма и "экономит и продолжает" кнопку. Я хочу сохранить данные каждой формы на зимовать сессии и спасти его на DB только в конце регистрации, когда пользователь подтверждает. Я не Зимовать эксперт, но я понял, что должен создать "долгую сессию". Как я делаю это? Я делаю это, оставляя сделку открытой? Как я восстанавливаю "грязное" предприятие от одного запроса до другого? Скажите, что у нас есть укладчик действия GWTP, который делает что-то вроде этого

//page1 action           
public myAction1Result execute(myAction1Action action,ExecutionContext context) throws ActionException {

    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.getTransaction().begin();

    User entityUser = new User();
    entityUser.setName(action.getName());
    session.save(entityUser); 

    return new myAction1Result();
}

Пока сделка не будет открыта, userEntity не будет спасен в DB и будет переходным. Как я могу восстановить его в другом actionHandler?

1
nl ja de

1 ответы

Есть много возможных сценариев:

1. Ваш ActionHandler должен быть (сессия) единичным предметом - поэтому вам не нужна зимовать сделка. Можно просто отредактировать и держать объект в случае ActionHandler. После того, как технологический процесс закончен, можно назвать отделенное действие (например, RegisterUserWorkflowCommitAction), который вводит главный ActionHandler и передает отредактированный объект.

2. Использовать transaction.merge (пользователь).

//...
@Singleton
public class RegisterUserWorkflowActionHandler //...
//...
transaction = session.beginTransaction();
session.merge(action.getUser());
transaction.commit();
//...

3. Держите сделку, используя область от вашего (единичный предмет) ActionHandler.

//...
@Singleton
public class RegisterUserWorkflowActionHandler //...
//...
if(this.getOpenTransaction() == null) {
    this.setOpenTransaction(session.beginTransaction())
}
//...

4. Может взглянуть на Errai JPA. Возможно, это - большая альтернатива для вас.

0
добавлено