Mysql org.hibernate.LazyInitializationException-无法初始化代理-无会话

Mysql org.hibernate.LazyInitializationException-无法初始化代理-无会话,mysql,database,hibernate,spring-mvc,transactions,Mysql,Database,Hibernate,Spring Mvc,Transactions,访问我声明的servlet时出现以下错误: 直接从Servlet获取服务时: public class UpdateFloorEventServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ApplicationContext

访问我声明的servlet时出现以下错误:

直接从Servlet获取服务时:

public class UpdateFloorEventServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());

    try {
        FloorService floorService = (FloorService)context.getBean("floorService");
        Floor floor = (Floor) floorService.findById (floorId);
        ...
}

@Transactional(propagation = Propagation.SUPPORTS)
@Service("floorService")
public class FloorServiceImpl implements FloorService {
  ...
}
谢谢

我发现问题与控制器无关,当我设置属性时,问题与控制器有关:

 floor.setNumberOfEvents    ((Long)numOfEvents);

@Entity
@Table(name="T_FLOOR")
public class Floor  {

@Id
@Column(name = "FLOOR_ID", unique = true, nullable = false)
private Integer id;
@Column(name = "FLOOR_KEY")
private String floorKey;
@Column(name = "NUMBER_OF_EVENTS")
private Long numberOfEvents;

public Integer getId() {
    return id;
}
public void setId(Integer id) {
    this.id = id;
}
public Long getNumberOfEvents() {
    return numberOfEvents;
}
public void setNumberOfEvents(Long numberOfEvents) {
    this.numberOfEvents = numberOfEvents;
}
public String getFloorKey() {
    return floorKey;
}
public void setFloorKey(String floorKey) {
    this.floorKey = floorKey;
}   
}
MySQL


UpdateFloorEventServlet
的第59行是什么?更重要的是,为什么要将控制器和服务层混搭在一起?它们应该完全分开。您不需要扩展HttpServlet,应该创建一个控制器类并使用MVC注释@controller。你用这个类打破了Spring的IoC的全部要点。但是,如果你决心这么做,你是否正确地设置了事务管理器?Hibernate的意思是,它没有事务会话,因此无法设置您试图设置的集合。如果我们可以看到您试图在服务中修改的对象,这会有所帮助。您需要发布您正在使用的Spring配置。我发现问题与控制器无关,它是在我设置对象楼层时出现的。setNumberOfEvents((长)numOfEvents);
 floor.setNumberOfEvents    ((Long)numOfEvents);

@Entity
@Table(name="T_FLOOR")
public class Floor  {

@Id
@Column(name = "FLOOR_ID", unique = true, nullable = false)
private Integer id;
@Column(name = "FLOOR_KEY")
private String floorKey;
@Column(name = "NUMBER_OF_EVENTS")
private Long numberOfEvents;

public Integer getId() {
    return id;
}
public void setId(Integer id) {
    this.id = id;
}
public Long getNumberOfEvents() {
    return numberOfEvents;
}
public void setNumberOfEvents(Long numberOfEvents) {
    this.numberOfEvents = numberOfEvents;
}
public String getFloorKey() {
    return floorKey;
}
public void setFloorKey(String floorKey) {
    this.floorKey = floorKey;
}   
}
  CREATE TABLE `T_FLOOR` (
  `FLOOR_ID` int(11) NOT NULL AUTO_INCREMENT,
  `FLOOR_KEY` varchar(45) DEFAULT NULL,
  `FLOOR_DESC` varchar(45) DEFAULT NULL,
  `LOCATION_ID` int(11) DEFAULT NULL,
  `NUMBER_OF_EVENTS` bigint(20) DEFAULT NULL,
  `LAST_EVENT` timestamp NULL DEFAULT NULL,
  `LAST_UPDATE` timestamp NULL DEFAULT NULL,
  `LATITUDE` float DEFAULT NULL,
  `LONGITUDE` float DEFAULT NULL,
   PRIMARY KEY (`FLOOR_ID`),
   UNIQUE KEY `FLOOR_ID_UNIQUE` (`FLOOR_ID`),
   KEY `FK_floor_location` (`LOCATION_ID`),
    CONSTRAINT `FK_door_location` FOREIGN KEY (`LOCATION_ID`) REFERENCES `T_LOCATION` (`LOCATION_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8