Hibernate 性能只读事务和许多子事务

Hibernate performance read-only transaction and many child transactions

我有以下场景:

我有一个用 @Transactional(readOnly = true) 注释的方法(父方法),我在其中获取一些实体。此方法将多次调用另一个方法(子方法)(100+),该方法需要创建一个人实体并需要为此获取的实体。这个子方法将获取的实体作为参数并用 @Transactional(propagation = Propagation.REQUIRES_NEW) 注释,因为我不希望一个人的创建失败停止其他人的创建。

我想知道的是:

如果只读方法所做的只是获取对象,然后将对象传递给其他方法,如果更新大量对象 IMO,最好只使用单个写入事务或批量写入事务。你能解释为什么子方法会失败吗?

您正在做的是执行“批处理作业”的一种方式。由于您正在为每个项目创建一个事务,因此您实际上使用的是所谓的“块大小”1。如果您要处理许多易于处理的项目,这可能会给您的数据库带来很大压力。通常最好设计一个可变块大小并调整块大小直到它适合您的需要。

根据您的生态系统,您可以使用以下解决方案之一: