簡體   English   中英

為什么 Hibernate 從 @Transactional 方法(Spring boot)返回對象時不能完全解析我的對象?

[英]Why doesn't Hibernate fully resolve my object when returning it from a @Transactional method (Spring boot)?

我的 serviceImpl.java 類中有一個包含這一行的方法:

Device device = getDevice(nbr);

在同一個類中是方法:

 @Transactional(transactionManager = JpaConfigCbOrg.TX_MGR)
    private Device getDevice(Long nbr)
    {

        Device device = deviceRepository.findById(nbr).get();
        return device;

    }

當我從 getDevice 方法獲取設備時,Device 對象尚未完全解析,但即使我已使用 @Transactional 注釋了 getDevice 方法,其字段的對象代理仍然是對象。

例如,Device 對象上有一個名為 DeviceModel 的屬性,聲明如下:

 @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "model_nbr", referencedColumnName = "model_nbr"),
            @JoinColumn(name = "dev_type", referencedColumnName = "dev_type")
    })
    private DeviceModel          model;

但是當我從這個@Transactional 方法返回它之后查看 Device 對象時,我沒有看到實際的 DeviceModel 屬性,而是一個對象代理。

為什么會這樣? 我錯過了什么讓我相信這個方法應該返回完整對象的休眠和事務?

問題 1: @Transactional對私有方法沒有任何影響,除非您使用基於 aop 的代理。 您也不需要用於獲取操作的事務屬性,因為您無法控制提交或刷新。

問題 2:聲明為惰性的對象將具有代理,直到您調用惰性對象上的歡迎程序。 嘗試device.getModel()並檢查對象。

暫無
暫無

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

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