public void delete(T entity) {
Assert.notNull(entity, "Entity must not be null!");
if (entityInformation.isNew(entity)) {
return;
}
Class<?> type = ProxyUtils.getUserClass(entity);
T existing = (T) em.find(type, entityInformation.getId(entity));
// if the entity to be deleted doesn't exist, delete is a NOOP
if (existing == null) {
return;
}
em.remove(em.contains(entity) ? entity : em.merge(entity));
}
1条答案
按热度按时间dpiehjr41#
spring数据不执行直接sql查询来删除实体,而是使用entitymanager及其remove方法。
例如,您可以查看org.springframework.data.jpa.repository.support.simplejparepository类,它为默认方法(例如deletebyid等)提供了实现:
由于entitymanager的remove方法获取实体对象本身,而不仅仅是id值或类似的值,因此spring data必须使用所选的参数(id或在您的案例中是2个值)执行find方法,以获取实际的实体对象,然后将其从entitymanager中移除。