Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/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
Hibernate 如何在Castor库中映射惰性初始化对象?_Hibernate_Spring Mvc_Castor - Fatal编程技术网

Hibernate 如何在Castor库中映射惰性初始化对象?

Hibernate 如何在Castor库中映射惰性初始化对象?,hibernate,spring-mvc,castor,Hibernate,Spring Mvc,Castor,在我的SpringMVC应用程序中,castor尝试映射惰性初始化的对象时发生错误 我有一对多的实体类: @Entity @Table(name = "a") public class A implements Serializable { ... private Set<B> b_set=new HashSet<B>(); @OneToMany(mappedBy = "a", cascade = CascadeType.ALL, orphan

在我的SpringMVC应用程序中,castor尝试映射惰性初始化的对象时发生错误

我有一对多的实体类:

@Entity
@Table(name = "a")
public class A implements Serializable {

    ...
    private Set<B> b_set=new HashSet<B>();

    @OneToMany(mappedBy = "a", cascade = CascadeType.ALL, orphanRemoval = true, fetch=FetchType.LAZY)
        public Set<b> getB_set() {
            return b_set;
        }
}
我使用Castor库将对象映射到xml

<mapping>
    <class name="package.a">

        ...
        <field name="b_set" type="package.b" collection="set">
            <bind-xml name="b_name" node="element"></bind-xml>
        </field>

    </class>

    <class name="package.b">
        ...
    </class>
</mapping>
在这两种方法中,Castor映射返回的对象并尝试映射字段b_集。第一种方法是延迟初始化。使用第一种方法时出现问题,因为castor无法映射字段b_集:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: package.A.b_set, no session or session was closed
我理解这个错误,但我不知道如何巧妙地解决这个问题。我想要两种方法

我使用Spring 3.1.0版本、castor 1.3.2和hibernate entitymanager 3.6.8最终版本


我将非常感谢您的帮助。

这是因为您的hibenrate会话在HTTP响应完成之前已关闭

要解决此问题,您可以执行以下操作:

1) 将收藏标记为渴望。 2) 使用“在视图中打开会话”模式

您可以在此处阅读更多信息:

Spring提供了开箱即用的开放会话视图解决方案。这非常容易使用:


之所以发生这种情况,是因为您的hibenrate会话在HTTP响应完成之前已关闭

要解决此问题,您可以执行以下操作:

1) 将收藏标记为渴望。 2) 使用“在视图中打开会话”模式

您可以在此处阅读更多信息:

Spring提供了开箱即用的开放会话视图解决方案。这非常容易使用:


这不是我所期望的解决方案。若我理解正确,OpenSession用于从数据库中读取缺少的对象(在我的示例中,用于从数据库中读取b_集)。正如我所写的,我想使用两种方法,一种是使用eager,另一种是使用lazy初始化。集合b_集非常大,所以当我不需要时,我不想从数据库中选择大量记录,将它们映射到对象a,然后映射到xml并通过http发送。最好的解决方案是告诉castor在调用第一个具有延迟初始化的方法时不要映射字段b_集。但我不知道怎么做。这不是我所期望的解决方案。若我理解正确,OpenSession用于从数据库中读取缺少的对象(在我的示例中,用于从数据库中读取b_集)。正如我所写的,我想使用两种方法,一种是使用eager,另一种是使用lazy初始化。集合b_集非常大,所以当我不需要时,我不想从数据库中选择大量记录,将它们映射到对象a,然后映射到xml并通过http发送。最好的解决方案是告诉castor在调用第一个具有延迟初始化的方法时不要映射字段b_集。但我不知道怎么做。
@RequestMapping(value = "/name/{name}", method = RequestMethod.GET)
    @ResponseBody
    public A findAByName(@PathVariable String name) {
        return aService.findByName(name);
    }

    @RequestMapping(value = "/b/{name}", method = RequestMethod.GET)
    @ResponseBody
    public A findAByNameWithB(
            @PathVariable String name) {
        return aService.findByNameWithB(name);
    }
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: package.A.b_set, no session or session was closed