在删除之前使用例如 Spring 首先检查数据库是否存在实体是否有意义

len*_*key 2 java spring hibernate spring-boot

例如,在 Spring/SpringBoot 中,您可以使用 Spring Data JPA 在数据库中添加和删除数据。

在删除实体之前首先检查该实体是否存在是否有意义?这样做有什么优点或缺点?

Dav*_*rad 6

一般来说,在做某事之前首先检查是一个坏主意,例如,在打开文件之前检查文件是否存在,或者在这种情况下,在删除数据库中的记录之前检查它是否存在。大多数(如果不是全部)系统都是多线程、多用户系统,仅仅因为文件一毫秒前存在并不意味着当您尝试打开它时它仍然存在,并且仅仅因为表中的一行存在一毫秒ago 并不意味着当您尝试删除它时它仍然存在。

例如,当您检查并正要提交事务时,其他进程或线程可能正在删除它。您检查该行;你看到它存在。事务被提交。您尝试删除它,但失败,因为不存在这样的行。

无论进行多少提前检查都无法避免失败。因此,您总是必须处理发生故障的情况。因此,最好只是尝试该操作并处理失败的情况。