Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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
Java 冬眠“;“没有会议或会议已结束”;即使在事务方法中绑定了会话_Java_Spring_Hibernate_Transactions_Transactional - Fatal编程技术网

Java 冬眠“;“没有会议或会议已结束”;即使在事务方法中绑定了会话

Java 冬眠“;“没有会议或会议已结束”;即使在事务方法中绑定了会话,java,spring,hibernate,transactions,transactional,Java,Spring,Hibernate,Transactions,Transactional,我正在使用Spring3.0.5、Hibernate3.6.7和Vaadin 我有一个像这样的简单实体 @Entity public class Foo { @OneToMany(fetch = FetchType.LAZY) private Collection<Bar> bars; ... } public class FooController { ... public void showFooBars(Foo foo) {

我正在使用Spring3.0.5、Hibernate3.6.7和Vaadin

我有一个像这样的简单实体

@Entity
public class Foo {
    @OneToMany(fetch = FetchType.LAZY)
    private Collection<Bar> bars;
    ...
}
 public class FooController {
 ...
     public void showFooBars(Foo foo) {
         FooBarDialog dialog = context.getBean(FooBarDialog.class);

         dialog.populate(foo);
         showDialog(dialog);
     }
 }
当用户要求显示foo条时,我会这样做

@Entity
public class Foo {
    @OneToMany(fetch = FetchType.LAZY)
    private Collection<Bar> bars;
    ...
}
 public class FooController {
 ...
     public void showFooBars(Foo foo) {
         FooBarDialog dialog = context.getBean(FooBarDialog.class);

         dialog.populate(foo);
         showDialog(dialog);
     }
 }

但问题是,我从hibernate得到了一个“无会话”异常。我更改了代码以注入会话工厂,并查看是否存在绑定会话,结果是。我不知道我做错了什么。有人知道吗?

您已将集合的关联类型指定为LAZY,因此在调用所属对象上的getter方法之前不会加载该集合。要注意的是,它需要在会话的范围内,或者是创建它的原始会话,或者是新会话。使用新会话加载惰性列表的警告是,您的实体被视为已从中分离,并且在调用以获取惰性集合之前,首先需要从中分离

所以只要打电话:

session.merge(foo);

在尝试迭代其
条之前

。我没有想到实体与会话分离。你的回答为找到更好的解决办法提供了依据。谢谢:)