session.delete() 和 session.remove() 有什么区别?

问题描述 投票:0回答:2

为什么hibernate中有两种删除实体的方法?两者的工作风格相同。

hibernate jpa
2个回答
0
投票

查看文档

JPA

EntityManager
接口提出了
remove
方法:

void remove(Object entity);

作为 JPA 提供者(请参阅this),Hibernate 实现了此接口。但是,hibernate 的

Session
接口也提供了以下方法:

void delete(Object object);

void delete(String entityName, Object object);

为了同样的目的。


0
投票

Session.delete():实体必须处于持久状态。

delete()
操作无法删除分离的实体。在这种情况下,该 API 将抛出
IllegalArgumentException

Session.remove():Is 也可以在分离状态下工作,这意味着如果我们的实体处于分离状态,我们可以使用此方法。

对于每个

remove()
调用,hibernate 都会加载实体,执行生命周期转换到 REMOVED 并触发 SQL DELETE 操作。对 N 个实体执行 N 个不同的 SQL DELETE 查询将导致性能非常低下。使用 JPQL 查询删除此类实体列表通常会更好。

© www.soinside.com 2019 - 2024. All rights reserved.