我的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方法返回设备对象后,再查看它时,我看不到实际的DeviceModel属性,而是对象代理。
为什么会这样?关于休眠和事务,我缺少什么,使我相信此方法应返回完整对象?
答案 0 :(得分:2)
问题1:
除非您使用基于aop的代理,否则@Transactional
对私有方法没有任何影响。您也不需要获取操作的事务性属性,因为您不控制提交或刷新。
问题2:
声明为惰性的对象将具有代理,直到您在惰性对象上调用问候者为止。尝试device.getModel()
并检查对象。