首页 > 解决方案 > 作为消费者参数的 Lambda 表达式无法正常工作

问题描述

我想通过 JPA 创建保存和删除方法。我发现使用执行事务的通用方法会很棒。

但是我的代码似乎不像我预期的那样工作(我想我可能在消费者逻辑上犯了一个错误?):

class MyClass {
   private EntityManager entityManager;

   MyClass() {
      entityManager = Persistence.createEntityManagerFactory("persistence-unit")
                               .createEntityManager();
   }

    public void save(MyObj obj) {
        executeInsideTransaction(entityManager -> entityManager.persist(obj));
    }

    public void delete(MyObj obj) {
        executeInsideTransaction(entityManager -> entityManager.remove(obj));
    }

    private void executeInsideTransaction(Consumer<EntityManager> action) {
        EntityTransaction transaction = entityManager.getTransaction();
        try {
            transaction.begin();
            action.accept(entityManager);
            transaction.commit();
        } catch (RuntimeException e) {
            transaction.rollback();
            logger.error("Transaction at MyClass went wrong and was rolled back! {}", e);
        }
    }

   public static void main(String[] args) {
      MyObj obj = new MyObj();
      MyClass myClass = new MyClass();

      myClass.save(obj); // it does nothing
}

它既不会抛出任何异常,也不会将对象持久化/删除到数据库中。

标签: javajpalambda

解决方案


推荐阅读