[英]Reusing Queries in Hibernate
我在Hibernate中使用HQL查詢,只是想知道,如果我可以增加我的應用程序重用查詢的性能。
通常,您必須為每個會話創建一個新的Query對象:
Session session;
Query q1 = session.createQuery("select a from Article a where id=:id");
q1.setInteger("id",123);
List result = q1.list();
現在我在HQL中有相對復雜的查詢,我不想一遍又一遍地解析。 有沒有辦法在另一個會話中創建查詢並重用它? 像這樣:
Session session;
Query q2 = q1.reattach();
q2.setInteger("id",123);
List result = q2.list();
如果Hibernate無論如何都使用預處理語句,這應該是一個值得注意的性能提升,特別是與緩存預准備語句的ConnectionPool結合使用時。
編輯 :通常不需要在Hibernate中重用查詢,因為無論如何查詢計划已經緩存在QueryPlanCache類中。 命名查詢也不提供任何改進,因為它們僅用於查找查詢字符串,並且沒有計划與它們相關聯。
總結一下:在Hibernate中重用Queries是沒有用的。 確保始終使用參數化查詢,因此請保持計划緩存較小。
您可以使用“命名查詢”:注釋您的實體類
@Entity
@NamedQuery(name="Article.findById", query="select a from Article a where id=:id")
public class Article{ ...
然后它將在啟動時解析一次,只要你想使用它,你只需調用:
session.getNamedQuery("Article.findById")
.setInteger("id",123);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.