[英]Is it possible to mark one method of an entire @Transactional class as non-transactional
[英]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.