簡體   English   中英

延遲加載在Hibernate的非事務類/方法中工作

[英]Lazy loading working in non-transactional class/method in Hibernate

我正在使用Spring-Hibernate應用程序。 流程照常: Controller --> Service --> DAO

我用@Transactional注釋了Service層類,從而標記了該類中的每個事務方法。在service類中,我進行了DAO調用以獲取某些域對象,然后將其轉換為DTO/VO對象,該對象將傳遞給controller。將域對象轉換為DTO ,我編寫了另一個自定義靜態類(僅具有靜態方法的類),例如ObjectMapper ,它將進行此轉換。

現在,域對象有一些子對象( One to Many )被延遲加載。 因此,在ObjectMapper ,當我訪問該子getter方法時,將發出一個額外的數據庫調用,該調用工作正常。 我不明白的是,由於ObjectMapper不是transactional ,所以我期望在拋出數據庫調用以從數據庫中獲取子對象時Session is closed ,從而引發一些異常。我正在DAO使用Session Factory getCurrentSession

有人可以向我解釋這種行為嗎?

我想您要么從事務性Service方法調用ObjectMapper(否則就應該調用),否則,可能啟用了“ hibernate.enable_lazy_load_no_trans”,從而使休眠會話保持打開狀態

只要在DAO的事務方法中進行了對轉換您的對象的靜態類/方法的調用,該會話仍處於打開狀態,並將用於數據庫調用。

暫無
暫無

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

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