2013-08-06 174 views
0

我試圖懶惰初始化我的一對多關係使用Spring的休眠模板。休眠懶惰加載和初始化

我已閱讀以下指南。 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語句(暴露SQL)

是否有在一個會話和一個SQL執行此一方式語句(hibernate_showsql = true)

回答

1

畢竟,這是一個怪癖和骯髒的解決方案適用於您發佈的問題,而不是最好的實踐。
您可以使用1個會話和2個sql執行此代碼(由於您正在執行兩條單獨的指令,因此更少是不可能的)。
簡而言之,您必須從spring-context獲取sessionFactory,打開會話,執行代碼並關閉會話;交易直接由春天管理! 在你的主要做:

0

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