Hibernate JPA EntityManager是否可能导致性能问题?
主要问题:我们正在开发一个从Java8创建的后端应用程序。随着我们在后端添加越来越多的DAO类和方法,一些查询变得越来越慢。我们已经排除了这可能是由于查询本身或数据库引起的可能性。当直接在SQL Developer之类的工具上运行时,查询没有问题。他们执行得很快。问题是,当我们在应用程序的后端运行它们时,它们运行得非常慢。查询并发性似乎也不是一个原因,因为我们没有异步执行查询 因此,现在我们认为这可能是由于我们的代码或配置。我们使用JPA进行查询,并通过Spring和Hibernate实现它。这就是我们定义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实现它。这
@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
}
问题
有人能帮我们吗?顺便提一下,我们的数据库是Oracle 12c我们是否应该每次都实例化一个新的EntityManager?如果“每次”都是指单个工作单元。因此,由于“相同的查询”会在同一rdbms实例上产生不同的“统计信息”,答案很清楚-这些查询并不相同。您可能不处理相同的查询,或者您是无数支持查询(如eg关系获取)的受害者。打开SQL调试,至少可以查看执行了哪种类型(以及有多少种)的准备状态表。@Antoniossss:例如,一个请求涉及多个DAO调用。我们目前对所有人使用一个EntityManager。例如,我们是否需要为每个DAO调用实例化一个新的EntityManager?这完全取决于您如何定义您的工作单元。根据经验,您可以说您的工作单元可以和事务一样大——假设您有短而健壮的事务。