gpt4 book ai didi

java - 当从 @Transactional 方法(Spring boot)返回对象时,为什么 Hibernate 没有完全解析我的对象?

转载 作者:行者123 更新时间:2023-11-30 01:43:15 27 4
gpt4 key购买 nike

我的 serviceImpl.java 类中有一个包含此行的方法:

设备 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 属性,而是一个对象代理。

为什么会发生这种情况?我对 hibernate 和事务缺少什么让我相信这个方法应该返回完整的对象?

最佳答案

问题 1:@Transactional 对私有(private)方法没有任何影响,除非您使用基于 aop 的代理。您也不需要获取操作的事务属性,因为您无法控制提交或刷新。

问题 2:声明为惰性的对象将具有代理,直到您调用惰性对象上的欢迎程序。尝试 device.getModel() 并检查对象。

关于java - 当从 @Transactional 方法(Spring boot)返回对象时,为什么 Hibernate 没有完全解析我的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59196707/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com