2014-03-12 174 views
1

我正在學習JPA。 我嘗試了Spring-JPA-Hibernate組合。 該應用程序的工作原理和我得到的結果。 但是,儘管數據庫中只有1條記錄,但要花4到5分鐘才能加載頁面。 不太確定我做錯了什麼。 我谷歌搜索相同,但我得到的是性能優化的建議,但我想我失去了更基本的東西,因爲在我的表中只有1條記錄。JPA休眠工作非常緩慢

下面是詳細信息:

的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> 

的web.xml

<?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> 

的context.xml

<?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> 

我正在使用Spring 3和Hibernate 3 jar文件。 我嘗試用Eclipselink替換Hibernate,並且應用程序完美無缺。它只有當我用Hibernate使用JPA時,我有緩慢問題。

這裏是我的EclipseLink和Hibernate使用的罐子:

的EclipseLink:

  • eclipselink.jar
  • javax.persistence_2.1.0.v201304241213.jar
  • javax.persistence.source_2 .1.0.v201304241213.jar

休眠:

  • EJB3-persistence.jar
  • 休眠-annotations.jar
  • 休眠-公地annotations.jar

用的EclipseLink,這是我的persistance.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> 

不知道我缺少什麼。

+2

很難提出什麼可能是確切的原因,但我建議啓用休眠日誌記錄,看看你是否能找到一些線索。 VisualVM也值得使用。 – Shailendra

+0

認識到它是一直耗用的Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME)方法。謝謝@Shailendra給我一個方向看。 –

+1

很高興幫助!通常,對於Web應用程序,實體管理器工廠將爲每個數據庫創建一次,每個單獨的請求將自己的實體管理器實例。 – Shailendra

回答

0

我在Windows 7桌面上遇到了這個性能問題。 但是,在具有相同代碼和數據庫的Windows 8計算機上嘗試時,我沒有遇到此問題。

沒有找到根本原因,但現在解決了我的問題。