spring数据JPA如何决定调用entityManager.persist(...)或entityManager.merge(...)方法

时间:2014-12-19 19:54:08

标签: spring spring-data

当调用entityManager.persist(...)-Method并且在spring数据jpa中调用entityManager.merge(...)时。根据文件: 如果实体尚未持久化,Spring Data JPA将通过调用entityManager.persist(...)-Method来保存实体,否则将调用entityManager.merge(...)-Method ......

那么Spring数据如何确定实体是否持久化?

1 个答案:

答案 0 :(得分:14)

这是save方法的impl(在SimpleJpaRepository中):

/*
     * (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);
        }
    }

所以看看entityInformation.isNew(entity)。此方法的实现是(AbstractPersistable):

public boolean isNew() {

        return null == getId();
    }

因此它根据id字段决定