使用Java 8,Concurrency和Hibernate 5处理服务层上的事务

时间:2018-02-01 22:00:32

标签: hibernate concurrency java-8

我正在使用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;
  }
}

有关如何实现此体系结构要求的任何建议吗?

0 个答案:

没有答案