当调用entityManager.persist(...)-Method并且在spring数据jpa中调用entityManager.merge(...)时。根据文件: 如果实体尚未持久化,Spring Data JPA将通过调用entityManager.persist(...)-Method来保存实体,否则将调用entityManager.merge(...)-Method ......
那么Spring数据如何确定实体是否持久化?
答案 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字段决定