我有一個hibernate DAO,當試圖訪問一個包/集合的返回對象的成員時拋出一個「無法懶惰地初始化一個角色集合」異常。保持Hibernate會話通過註釋失效? - 未能懶洋洋地初始化一個角色集合
我明白拋出異常的問題的範圍。 Hibernate返回我的對象,並且對於任何集合,返回代理對象。在我的調用者中,當我去訪問這些代理對象時,因爲休眠會話已經過期,這個異常被拋出。
我想知道的是,如何使用註釋保持會話從到期?可能嗎?
舉例來說,如果我的調用方法:
@RequestMapping("refresh.url")
public ModelAndView refresh(HttpServletRequest request, HttpServletResponse response, int id) throws Exception {
TestObject myObj = testObjDao.get(id);
// throws the exception
myObj.getCollection();
我將如何防止使用註解這個異常?我知道有一個解決辦法是通過回調這僞代碼可能看起來像延長Hibernate的Session:
@RequestMapping("refresh.url")
public ModelAndView refresh(HttpServletRequest request, HttpServletResponse response, int id) throws Exception {
session = get hibernate session...
session.doInSession(new SessionCallback() {
TestObject myObj = testObjDao.get(id);
// no longer throws the exception
myObj.getCollection();
});
但這似乎相當重複的有在我所有的功能需要訪問集合。是不是有一種方法可以在那裏簡單地拍@Transactional註釋並完成它?如在:
@RequestMapping("refresh.url")
@Transactional // this doesn't extend the session to this method?
public ModelAndView refresh(HttpServletRequest request, HttpServletResponse response, int id) throws Exception {
TestObject myObj = testObjDao.get(id);
// throws the exception
myObj.getCollection();
感謝您的幫助,向我解釋這一點。