Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Spring注释的配置更改_Spring_Spring Mvc_Annotations - Fatal编程技术网

基于Spring注释的配置更改

基于Spring注释的配置更改,spring,spring-mvc,annotations,Spring,Spring Mvc,Annotations,我有一个使用Hibernate的spring MVC(3.1)web应用程序,它运行正常-今天,我尝试将配置完全转移到基于注释的配置(仅在代码配置中对spring尚不支持的安全内容使用xml) 经过一些调整后,我的应用程序启动时没有出现错误,并且主页加载正确-但是我看到Hibernate会话出现了一些不同的行为-即,在加载实际涉及Hibernate实体的页面时,我遇到了以下错误: org.hibernate.LazyInitializationException: failed to lazil

我有一个使用Hibernate的spring MVC(3.1)web应用程序,它运行正常-今天,我尝试将配置完全转移到基于注释的配置(仅在代码配置中对spring尚不支持的安全内容使用xml)

经过一些调整后,我的应用程序启动时没有出现错误,并且主页加载正确-但是我看到Hibernate会话出现了一些不同的行为-即,在加载实际涉及Hibernate实体的页面时,我遇到了以下错误:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.tmm.web.domain.Profile.connections, no session or session was closed
这种情况发生在以下场景中:

  • 请求点击我的
    @Controller
    ,并加载用户
    配置文件
    对象
  • 在同一个方法调用中(因此我们这里不讨论分离的实体等),它尝试调用
    profile.getConnections()
  • Profile.connections实际上并没有显式地声明fetchtype,因此应该默认为“渴望加载”(我的理解是这样的?),但无论如何,
    getConnections()
    调用都是在加载
    Profile
    之后直接进行的,因此即使是延迟加载,也会这样认为,它可以很容易地返回到数据库并按需加载连接

    //@控制器代码 Account viewedUser=accountService.loadAccountByUserName(用户名); put(“viewedUserConnections”,viewedUser.getUserProfile().getConnections())

    //轮廓实体 @OneToMany(mappedBy=“user”,cascade=CascadeType.ALL) 私有列表连接=新建ArrayList()

  • 现在,我知道延迟加载等,所以这不是一个问题——就像我提到的所有Hibernate的东西都正常工作一样——所以我真正的问题是,什么样的Spring配置可能会影响这种行为


    我可以发布我的前后xml vs annotation config,但我希望有人能为我指明切换过程中可能错过的某些配置的方向。

    您的假设主要是错误的:

    在同一个方法调用中(因此我们这里不讨论分离的实体等)

    该方法是控制器的一种方法。在典型的Spring应用程序中,控制器不是事务性的,而是服务。因此,除非您配置了“视图中打开的会话”过滤器或拦截器,否则当事务服务方法返回时,会话将关闭,因此控制器始终使用分离的实体

    实际上,Profile.connections并不显式地声明fetchtype,因此应该默认为“急切加载”

    没有。XXX默认情况下,许多关联都是惰性的


    如果相同的代码在转换之前工作,我猜您在视图过滤器或拦截器中有一个打开的会话,并且您在迁移到注释时忘记了它。

    当然,是的,您是对的-我太愚蠢了。。第二点,我实际上刚刚测试过,但仍然是错误的。。谢谢