gpt4 book ai didi

java - Spring 服务中的 LazyInitializationException

转载 作者:行者123 更新时间:2023-12-02 08:16:23 26 4
gpt4 key购买 nike

我正在 Spring 3.0.5 和 Hibernate 3.6.2 中开发一个应用程序,目前我正在 JSON Controller 中工作,但我遇到了这个异常,我无法理解为什么会发生。我之前在SO和Google上查过,但这个问题很奇怪。这是我的代码:

Controller

@RequestMapping(value = "/props", method = RequestMethod.GET)
public @ResponseBody
List<Property> getJsonProps(String id) {
if(id==null)return null;
Device dev = deviceService.getDispositivo(Long.parseLong(id));
List<Property> props = deviceService.listProperties(dev, 10);
return props;
}

设备服务

@Service("manageDevices")
@Transactional(readOnly=true,propagation=Propagation.REQUIRED)
public class ManageDevicesImpl implements ManageDevices {

private Logger log = LoggerFactory.getLogger(getClass());

@Autowired
private DevicesDAO devicesDAO;


public List<Property> listProperties(Device dev, Integer qty) {
List<Property> props = devicesDAO.pickProperties(dev, qty);
return props;
}
}

DAO

@Repository("devicesDAO")
public class DevicesDAOImpl implements DevicesDAO {
private Logger log = LoggerFactory.getLogger(getClass());

@Autowired
private SessionFactory sessionFactory;

public List<Property> pickProperties(Device dev, Integer qty) {
if(qty >= 0){
log.debug("Open? "+ sessionFactory.getCurrentSession().isOpen());
log.debug("Tx Active? " + sessionFactory.getCurrentSession().getTransaction().isActive());
List<Property> props = dev.getProperties();
if(props != null){
if(props.size() >= qty)
return props.subList(0, qty-1);
else
return props;
}
}
return null;
}

}

异常发生在 pickProperties 函数(DAO 层)中,位于我尝试加载属性(getProperties)的行。在日志中,有一个打开的 session 和事务。提前致谢。

最佳答案

您能发布您遇到的确切异常吗?

您处于 dev.getProperties() 行的事务中,但不是加载 dev 的事务中。您要么需要重新附加它,要么安排在加载它的事务中时调用 dev.getProperties(),或者向上移动事务边界,以便两个调用都在相同的事务,或者更改 Hibernate 配置以便 properties 不会延迟加载,或者更改加载 dev 的代码以便它获取 properties在 HQL 中。

哪些选项适用于您取决于您​​的情况,但我会从最后一个开始。

关于java - Spring 服务中的 LazyInitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6348527/

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