我通过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方法。但现在我得到了一个except:
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)
如何解决这个问题?
答案 0 :(得分:2)
您是否添加了cascade = persist,并在多对多关系中合并?
您所追求的行为需要此级联。