簡體   English   中英

在Hibernate中query.uniqueResult()和session.load()之間有什么區別?

[英]What's the difference between query.uniqueResult() vs session.load() in Hibernate?

誰能告訴我這段代碼有什么區別:

// This following method checks if there is an open session
// and if yes - returns it,  if not - opens a new session. 
Session session = getSession();
Query query = session.createQuery("from Entity e where e.id = 1");
Entity object = (Entity)query.uniqueResult(); 

和這個:

 Session session = getSession();
 Entity object = (Entity)session.load(Entity.class, new Integer(1));


第一個方法是否返回代理對象? 如果我再次調用它,它會打到數據庫嗎?

存在一些差異(從Hibernate 5.2.6開始)。

session.load()

  • 它僅通過id搜索,假設實體存在
  • 它總是會返回一個“ 代理 ”(Hibernate術語)而不會訪問數據庫。 在Hibernate中, proxy是一個具有給定標識符值的對象,它的屬性尚未初始化 ,它看起來像一個臨時假對象。
  • 僅用於檢索您假定存在的實例,其中不存在將是ObjectNotFoundException


query.uniqueResult()

  • 您可以使用復雜條件查詢,而不僅僅是id
  • 返回與查詢匹配的單個實例的便捷方法,如果查詢未返回結果,則返回null
  • 它將返回一個實體,其集合初始化或不取決於FetchType

暫無
暫無

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

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