Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate性能只读事务和多个子事务_Java_Hibernate_Jpa_Persistence - Fatal编程技术网

Java Hibernate性能只读事务和多个子事务

Java Hibernate性能只读事务和多个子事务,java,hibernate,jpa,persistence,Java,Hibernate,Jpa,Persistence,我有以下情况: 我有一个用@Transactional(readOnly=true)注释的方法(父方法),在这里我获取一些实体。此方法将多次(100+)调用另一个方法(子方法),该方法需要创建person实体,并且需要为此获取实体。此子方法将获取的实体作为参数,并使用@Transactional(propagation=propagation.REQUIRES_NEW)进行注释,因为我不希望一个人的创建失败阻止其他人的创建 我想知道的是: 这是一种好的做法还是坏的做法 只读事务的影响是什么?此

我有以下情况:

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

我想知道的是:

  • 这是一种好的做法还是坏的做法
  • 只读事务的影响是什么?此事务在很长一段时间(+-5分钟)内保持活动状态,违反最佳做法的是使事务尽可能小

如果只读方法所做的只是获取对象,然后将对象传递给另一个方法,那么如果您更新了大量对象,您最好只使用一个写事务或批处理写事务。您能解释一下为什么子方法会失败吗

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

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