【问题标题】:Spring Data JPA save new Entity and get its all dependenciesSpring Data JPA 保存新实体并获取其所有依赖项
【发布时间】:2016-09-03 19:54:52
【问题描述】:

我通过 Spring Data Jpa save() 方法将我的实体保存到数据库。此方法返回保存的实体对象,但是如果我保存新实体,则返回的对象未填充,例如 @ManyToMany 完整实体。

据我所知,当 Spring Data JPA 保存新实体时,它使用 entityManager.persist() 方法,如果实体存在于数据库中,则 save() 方法使用 entityManager.merge() 方法。

我的问题是,如何在数据库中保存新实体并在一个事务中获取其完整依赖关系?

我试图添加一些帮助类,我的 bean 服务扩展,例如:

public abstract class HelperPersistenceService<E extends AbstractEntity<I>, I extends Serializable> {

    @PersistenceContext
    private EntityManager entityManager;

    @Transactional
    public E saveWithMerge(E e) {
        if (e.getId() == null) {
            entityManager.persist(e);
        }
        return entityManager.merge(e);
    }

}

它可以在没有 @Transactional 方法的情况下工作。但现在我得到了一个例外:

javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:278)
    at com.sun.proxy.$Proxy778.persist(Unknown Source)

如何解决这个问题?

【问题讨论】:

    标签: java spring jpa spring-data spring-data-jpa


    【解决方案1】:

    您是否在多对多关系上添加了 cascade=persist,merge?

    你所追求的行为需要这个级联存在。

    【讨论】:

      猜你喜欢
      • 2018-01-11
      • 2013-05-09
      • 2021-11-09
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      相关资源
      最近更新 更多