如何解决使用命名查询批量删除 JPA/HIBERNATE 是不好的做法吗?
使用命名查询进行批量删除是一种不好的做法吗?
例如:
DELETE FROM PERSON
WHERE ID IN (
SELECT c.person.ID
FROM COUNTRY c
WHERE COUNTRY = 'BRAZIL'
);
如果是,为什么?
我知道命名查询不尊重需要手动解决的级联和其他 jpa 注释,但除此之外,这是一种不好的做法吗?有没有更喜欢的方式来做到这一点?
解决方法
这种类型的查询绕过 JPA 缓存机制,因此如果需要维护关系或与此实体相关,则您拥有自己的查询 - Country 可能仍然对任何缓存中已删除的 Person 有过时的引用。某些 JPA 提供程序 (EclipseLink) 默认具有 2 个级别的缓存,因此此类问题可能会持续很长时间 - 直到刷新国家/地区或重新启动应用程序。
但是每个工具都有它的位置。我在过去的项目中经常使用它来有效地删除较大的数据集,而不必将其提取到内存中,只需在其上调用 EntityManager.remove(entity)。我不建议过度使用或首先使用这种模式,但在需要时它确实是一个很好的工具。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。