簡體   English   中英

Hibernate Lazy加載和初始化

[英]Hibernate Lazy Loading and initialization

我正在嘗試使用Spring的Hibernate模板懶惰地初始化我的一對多關系。

我已閱讀以下指南。 http://dinukaroshan.blogspot.sg/2012/08/lazyeager-loading-using-hibernate-by.html

參考這些代碼

/** 
  * {@inheritDoc} 
  */  
 public Child getChildByIdWithoutToys(Long childId) {  
  return getHibernateTemplate().get(Child.class, childId);  
 }  

 /** 
  * {@inheritDoc} 
  */  
 public Child getChildByIdWithToys(Long childId) {  
  Child child = getChildByIdWithoutToys(childId);  
  /** 

上面的代碼使用2個會話和2個sql語句(expose sql)

有沒有一種方法可以在一個會話和一個sql語句中執行此操作(hibernate_showsql = true)

畢竟,這是適用於您所發布示例的古怪而骯臟的解決方案,而不是最佳實踐。
您可以使用1個會話和2個sql來執行此代碼(較少執行是不可能的,因為您正在執行兩個單獨的指令)。
簡而言之,您必須從spring上下文中獲取sessionFactory,打開一個會話,執行代碼並關閉會話。 交易由春季直接管理! 在您的主要工作中:

/*...object creation... */
final SessionFactory sf = context.getBean("sessionFactory");
/* Session creation */
final Session s = sf.openSession();
ChildDAO childDAO = (ChildDAO) context.getBean("childDAO");

childDAO.persistChild(child);
/*other code*/
/* session close */
s.close();

為了將所有內容保持在一個會話中,您需要從一個內部調用這些方法。 最簡單的方法是使用Spring的聲明式事務支持,最好使用@Transactional標記頂級方法(您可以在其中輸入整個持久性系統)。 這些查找方法將“繼承”其調用者的事務,而不是創建新的事務。

暫無
暫無

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

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