Spring Data JPA保存新实体并获取其所有依赖项

斯潘斯基

我通过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)

如何解决这个问题?

迈克尔·威尔斯

您是否添加了层叠=持久性,合并了多对多关系?

您要执行的行为要求此级联必须存在。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章