Performance JPA Hibernate工作非常慢

Performance JPA Hibernate工作非常慢,performance,hibernate,jpa,eclipselink,Performance,Hibernate,Jpa,Eclipselink,我正在学习JPA。 我尝试了Spring JPA Hibernate组合。 应用程序运行正常,我得到了结果。 但是,尽管数据库中只有一条记录,但加载页面大约需要4到5分钟。 不太清楚我做错了什么。 我在谷歌上搜索了同样的结果,但我得到的只是性能优化建议,但我认为我缺少了一些更基本的东西,因为我的表中只有一条记录 详情如下: Persistence.xml <?xml version="1.0" encoding="UTF-8" ?> <persistence xmlns:xsi

我正在学习JPA。 我尝试了Spring JPA Hibernate组合。 应用程序运行正常,我得到了结果。 但是,尽管数据库中只有一条记录,但加载页面大约需要4到5分钟。 不太清楚我做错了什么。 我在谷歌上搜索了同样的结果,但我得到的只是性能优化建议,但我认为我缺少了一些更基本的东西,因为我的表中只有一条记录

详情如下:

Persistence.xml

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
  version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
  <persistence-unit name="bike_unit" transaction-type="RESOURCE_LOCAL">
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  <jta-data-source>java:comp/env/jdbc/testdb123</jta-data-source>
    <class>bike.Bike</class>
    <class>bike.Company</class>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
        <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/bike"/>
        <property name="javax.persistence.jdbc.user" value="abc"/>
        <property name="javax.persistence.jdbc.password" value="abc"/>
    </properties>

  </persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     version="3.0">
    <servlet>
        <servlet-name>bikeDispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>bikeDispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>/home.html</welcome-file>
    </welcome-file-list>

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

    <resource-env-ref>
        <resource-env-ref-name>jdbc/testdb123</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>

</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/testdb123" auth="Container" 
    type="javax.sql.DataSource"
    username="abc" password="abc" 
    driverClassName="org.apache.derby.jdbc.ClientDriver" 
    url="jdbc:derby://localhost:1527/bike" />
</Context> 

org.hibernate.ejb.HibernatePersistence
java:comp/env/jdbc/testdb123
自行车,自行车
自行车公司
web.xml

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
  version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
  <persistence-unit name="bike_unit" transaction-type="RESOURCE_LOCAL">
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  <jta-data-source>java:comp/env/jdbc/testdb123</jta-data-source>
    <class>bike.Bike</class>
    <class>bike.Company</class>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
        <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/bike"/>
        <property name="javax.persistence.jdbc.user" value="abc"/>
        <property name="javax.persistence.jdbc.password" value="abc"/>
    </properties>

  </persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     version="3.0">
    <servlet>
        <servlet-name>bikeDispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>bikeDispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>/home.html</welcome-file>
    </welcome-file-list>

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

    <resource-env-ref>
        <resource-env-ref-name>jdbc/testdb123</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>

</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/testdb123" auth="Container" 
    type="javax.sql.DataSource"
    username="abc" password="abc" 
    driverClassName="org.apache.derby.jdbc.ClientDriver" 
    url="jdbc:derby://localhost:1527/bike" />
</Context> 

自行车抹刀
org.springframework.web.servlet.DispatcherServlet
1.
自行车抹刀
*.html
/home.html
30
jdbc/testdb123
javax.sql.DataSource
context.xml

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
  version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
  <persistence-unit name="bike_unit" transaction-type="RESOURCE_LOCAL">
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  <jta-data-source>java:comp/env/jdbc/testdb123</jta-data-source>
    <class>bike.Bike</class>
    <class>bike.Company</class>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
        <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/bike"/>
        <property name="javax.persistence.jdbc.user" value="abc"/>
        <property name="javax.persistence.jdbc.password" value="abc"/>
    </properties>

  </persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     version="3.0">
    <servlet>
        <servlet-name>bikeDispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>bikeDispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>/home.html</welcome-file>
    </welcome-file-list>

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

    <resource-env-ref>
        <resource-env-ref-name>jdbc/testdb123</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>

</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/testdb123" auth="Container" 
    type="javax.sql.DataSource"
    username="abc" password="abc" 
    driverClassName="org.apache.derby.jdbc.ClientDriver" 
    url="jdbc:derby://localhost:1527/bike" />
</Context> 

我正在使用Spring3和Hibernate3JAR文件。 我尝试用Eclipselink替换Hibernate,应用程序运行得非常完美。只有当我将JPA与Hibernate一起使用时,我才有慢度问题

以下是我与Eclipselink和Hibernate一起使用的罐子:

日食:

  • 日食罐
  • javax.persistence_2.1.0.v201304241213.jar
  • javax.persistence.source_2.1.0.v201304241213.jar
休眠:

  • ejb3-persistence.jar
  • hibernate-annotations.jar
  • hibernate-commons-annotations.jar
使用Eclipselink,我的persistence.xml就是这样的:

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
  version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
  <persistence-unit name="bike_unit" transaction-type="RESOURCE_LOCAL">
    <class>bike.Bike</class>
    <class>bike.Company</class>
    <properties>
      <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver" />
      <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/bike" />
      <property name="javax.persistence.jdbc.user" value="abc" />
      <property name="javax.persistence.jdbc.password" value="abc" />
    </properties>

  </persistence-unit>
</persistence>

自行车,自行车
自行车公司

不确定我遗漏了什么。

我在Windows 7桌面上遇到了这个性能问题。 然而,当我在Windows8机器上使用相同的代码和数据库进行测试时,我并没有遇到这个问题


没有找到根本原因,但现在解决了我的问题。

很难确定确切的原因,但是我建议启用hibernate日志记录,看看是否可以找到一些线索。同样值得使用的还有VisualVM。认识到它是一直在消耗时间的Persistence.createEntityManagerFactory(Persistence\u UNIT\u NAME)方法。谢谢@Shailendra为我指路。很高兴能帮忙!通常,对于web应用程序,将为每个数据库创建一次entity manager工厂,每个请求都将创建自己的entity manager实例。