我正在使用Java 8,Play Framework 2和Hibernate 5实现一个Web应用程序。目前我的泛型Dao中的方法如下所示:
public abstract class GenericDao<T> {
@Inject
private JPAApi jpaApi;
private Class<T> clazz;
public GenericDao(Class<T> clazz) {
this.clazz = clazz;
}
public CompletionStage<List<T>> save(T entity) {
return CompletableFuture.supplyAsync(() ->
jpaApi.withTransaction((em) -> {
Session session = em.unwrap(Session.class);
return (int) session.save(entity);
})
);
}
}
到目前为止一切都很好,但我想实现一个处理应用程序事务性的层服务。如果我想在服务层上调用2次保存,我希望它们都包含在同一个事务中。这是我目前的服务:
public class AttributeService extends CrudService<Attribute> implements IAttributeService {
@Inject
private AttributeDao attributeDao;
@Inject
private ItemDao itemDao;
@Override
public CompletionStage<Void> saveItemAttributes(int itemId, List<Attribute> attributes) {
// need to call ItemDao.save and AttributeDao.save
return null;
}
}
有关如何实现此体系结构要求的任何建议吗?