我在Spring 3.0.5开发应用程序和Hibernate 3.6.2,目前我在一个JSON控制器我工作,但我有此异常,我无法理解为什么发生。我以前在SO和Google中检查过,但这个问题很奇怪。因此,这里是我的代码:LazyInitializationException中在春季服务
控制器
@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)的行。在日志中,有一个公开的会话和事务。提前致谢。
感谢您的回答。抛出的异常是org.hibernate.LazyInitializationException,我不发布整个堆栈跟踪,因为你的帖子澄清了一些概念,并因此我将修改服务方法中的逻辑,以确保所有内容都将在内部完成同一笔交易。 – Jairo 2011-06-14 21:54:03