最近,我遇到了以下代码:

@Transactional
public MyEntity insert(MyEntity entity) {
    MyEntity merged = entityManager.merge(entity);
    return myEntityRepository.save(merged);
}


实体管理器的定义如下:

@PersistenceContext private EntityManager entityManager;


仓库是Spring QueryDSL仓库:

@Repository
public interface MyEntityRepository extends QueryDslRepository<MyEntity>{
}


我的问题是,当我们紧接着使用entityManager.merge(entity)持久化实体时,是否真的需要调用myEntityRepository?实体管理器在做某些事情,仓库无法做到吗?调用存储库不够吗?

最佳答案

在我看来,这就像是对货物的崇拜。必要时implementation of save()已经进行了合并(有时是不必要的):

/*
 * (non-Javadoc)
 * @see org.springframework.data.repository.CrudRepository#save(java.lang.Object)
 */
@Transactional
public <S extends T> S save(S entity) {

    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }
}

关于java - 在Spring数据存储库顶部使用EntityManager,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51589123/

10-10 07:09