【发布时间】:2017-10-30 05:15:09
【问题描述】:
我正在做一个项目,我使用 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。
是否存在不重复自己做同样事情的解决方案:)?
泰
【问题讨论】:
-
是的,如果你使用 Spring,它有一个名为 @Transactional 的注解,它会自动完成所有这些工作。看这里:docs.spring.io/spring/docs/current/javadoc-api/org/…
-
如果您不使用 spring,您可以创建一个“Transactable”接口并将其传递给一个对象,该对象的唯一工作是捕获事务失败并回滚它们。有工厂就够了
标签: java spring hibernate maven jpa