簡體   English   中英

使用JPA /休眠保持數據庫連接

[英]Keep DB connection using JPA/Hibernate

我在應用程序中使用JPA和Hibernate。 (使用PostgreSQL作為DBMS)

我執行了很多選擇語句,以按名稱存儲在數據庫中的項目。

我使用以下代碼:

    //em is the javax.persistence.EntityManager Object.
    Query q = em.createQuery("Select i from Item i where i.name = :name");

    q.setParameter("name", nameParam);

    List<NavigationItem> results = q.getResultList();

因此,我的問題是,通過連接到數據庫,准備語句並關閉連接,我浪費了很多時間。 我使用Eclipse TPTP跟蹤花費時間最多的方法:(每分鍾)

com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery():〜22s com.mchange.v2.c3p0.impl.NewProxyConnection()。close():〜16s com.mchange.v2.c3p0.impl.NewProxyConnection( ).prepareStatement(String):〜12s com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource()。getConnetction():〜6s com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.close():〜4s

Query的執行需要他的時間,沒關系,但是我認為其他方法比他們需要的時間更多。 如果我可以為幾個(或幾百個)執行打開連接,則應用程序會快很多。

所以我的問題是:如何保持此連接打開?

性能分析確實會對性能產生一些影響,但是仍然,執行時間報告她發瘋,而且這是意外的。 我的意思是,您正在使用連接池,因此獲得連接和關閉幾乎是瞬時的,這些操作根本不應該是問題,這就是使用連接池的關鍵所在。 而且准備陳述的時間非常可笑。

某個地方出了點問題, 保持連接打開絕對不是解決方案(池應該可以工作)。 但是沒有足夠的信息來進行診斷。 因此,能否請您添加以下詳細信息:

  • 上下文(外部容器?內部容器?)
  • 連接池配置。
  • 您顯示的代碼段周圍的代碼。

附帶說明一下,您應該偏愛使用命名查詢(JPA提供程序通常會對它們進行預編譯,以避免每次解析JPQL和生成SQL的開銷)。 但這不是這里的問題。 根本原因必須解決。

資源資源

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM