使用Hibernate管理事务

时间:2017-05-29 20:58:50

标签: java spring hibernate maven jpa

我正在开发一个项目,我使用Hibernate + JPA来管理我的数据库。

但是当我在写我的服务时,我必须写出类似的东西:

public String subscribe(String lastName, String firstName, String username, String borndate, String managerPwd) throws AuthenticationException, ExistingSubscriberException, SubscriberException, BadParametersException {
    try {
        this.authenticateMngr(managerPwd);

        this.em.getTransaction().begin();

        // Generate password and birthdate
        String password = UUID.randomUUID().toString();
        Calendar birthdate = CalendarManipulator.convertToCalendar(borndate);

        // Save player
        try {
            this.playerService.add(firstName, lastName, birthdate, username, password);
        } catch (PlayerAlreadyExistException e) {
            throw new ExistingSubscriberException();
        } catch (InvalidNameException | MinorPersonException | NullParameterException | InvalidPasswordException e) {
            throw new BadParametersException();
        } catch (Exception e) {
            this.unexeptedException(e);
        }

        this.em.getTransaction().commit();

        return password;
    }
    catch (Exception e) {
        this.em.getTransaction().rollback();
        throw e;
    }
}

这部分代码:

public void function {
    try {
        this.em.getTransaction().begin();

        // .......

        this.em.getTransaction().commit();

    }
    catch (Exception e) {
        this.em.getTransaction().rollback();
        throw e;
    }
}

我必须在每个服务上写它...超过50 :(

我没有使用Spring(我知道它存在一些解决方案),我在我的项目中单独使用Hibernate + JPA。

确实存在一个解决方案来做同样的事情而不重复自己:)?

2 个答案:

答案 0 :(得分:2)

如果您使用普通Java - 那么是的,您应该在每个服务中编写此样板代码。 但是,您可以使用AOP,并为声明性事务划分创建自己的建议。

答案 1 :(得分:2)

您不需要一遍又一遍地写它们。您可以使用Spring框架自动执行此操作。 Spring框架中有一个名为@Transactional here

的注释