Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Hibernate JPA EntityManager是否可能导致性能问题?_Hibernate_Jpa_Jpa 2.0_Entitymanager_Hibernate Entitymanager - Fatal编程技术网

Hibernate JPA EntityManager是否可能导致性能问题?

Hibernate JPA EntityManager是否可能导致性能问题?,hibernate,jpa,jpa-2.0,entitymanager,hibernate-entitymanager,Hibernate,Jpa,Jpa 2.0,Entitymanager,Hibernate Entitymanager,主要问题:我们正在开发一个从Java8创建的后端应用程序。随着我们在后端添加越来越多的DAO类和方法,一些查询变得越来越慢。我们已经排除了这可能是由于查询本身或数据库引起的可能性。当直接在SQL Developer之类的工具上运行时,查询没有问题。他们执行得很快。问题是,当我们在应用程序的后端运行它们时,它们运行得非常慢。查询并发性似乎也不是一个原因,因为我们没有异步执行查询 因此,现在我们认为这可能是由于我们的代码或配置。我们使用JPA进行查询,并通过Spring和Hibernate实现它。这

主要问题:我们正在开发一个从Java8创建的后端应用程序。随着我们在后端添加越来越多的DAO类和方法,一些查询变得越来越慢。我们已经排除了这可能是由于查询本身或数据库引起的可能性。当直接在SQL Developer之类的工具上运行时,查询没有问题。他们执行得很快。问题是,当我们在应用程序的后端运行它们时,它们运行得非常慢。查询并发性似乎也不是一个原因,因为我们没有异步执行查询

因此,现在我们认为这可能是由于我们的代码或配置。我们使用JPA进行查询,并通过Spring和Hibernate实现它。这就是我们定义EntityManager的方式

@Repository
public class MyDao {
  @PersistenceContext(unitName = "myPersistenceUnit")
  protected EntityManager entityManager;

  public EntityManager getEntityManager() {
     return entityManager;
  }

  //dao methods. We use the same EntityManager for every DAO method
}
问题
  • 我们的配置有什么问题吗
  • 执行时间慢的问题是否与我们如何创建EntityManager有关
  • 我们是否应该每次都实例化一个新的EntityManager 我们发现的一个有用数据是,当我们查看数据库统计数据时,执行查询显示出非常高的I/O使用率。在SQLDeveloper上执行它们不会产生相同的I/O统计信息


    有人能帮我们吗?顺便提一下,我们的数据库是Oracle 12c

    我们是否应该每次都实例化一个新的EntityManager?如果“每次”都是指单个工作单元。因此,由于“相同的查询”会在同一rdbms实例上产生不同的“统计信息”,答案很清楚-这些查询并不相同。您可能不处理相同的查询,或者您是无数支持查询(如eg关系获取)的受害者。打开SQL调试,至少可以查看执行了哪种类型(以及有多少种)的准备状态表。@Antoniossss:例如,一个请求涉及多个DAO调用。我们目前对所有人使用一个EntityManager。例如,我们是否需要为每个DAO调用实例化一个新的EntityManager?这完全取决于您如何定义您的工作单元。根据经验,您可以说您的工作单元可以和事务一样大——假设您有短而健壮的事务。