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
Java 未能延迟初始化集合和vaadin_Java_Hibernate_Vaadin_Lazy Loading - Fatal编程技术网

Java 未能延迟初始化集合和vaadin

Java 未能延迟初始化集合和vaadin,java,hibernate,vaadin,lazy-loading,Java,Hibernate,Vaadin,Lazy Loading,你好,我的实体的vaadin和lazy负载有问题 我的实体以这种方式包含一对多和多对一的关系 @Entity @Table(name = "Categories") public class Category extends AbstractEntity { private static final long serialVersionUID = 1L; private String name; @ManyToOne @JoinColumn(name = "parent") private

你好,我的实体的vaadin和lazy负载有问题 我的实体以这种方式包含一对多和多对一的关系

@Entity 
@Table(name = "Categories")
public class Category extends AbstractEntity {
private static final long serialVersionUID = 1L;

private String name;
@ManyToOne
@JoinColumn(name = "parent")
private Category parent; 
@Column
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
private List<Category> children = new ArrayList<>(); 

public Category() { } 
@实体
@表(name=“Categories”)
公共类类别扩展了抽象实体{
私有静态最终长serialVersionUID=1L;
私有字符串名称;
@许多酮
@JoinColumn(name=“parent”)
私人类别家长;
@纵队
@OneToMany(mappedBy=“parent”,fetch=FetchType.LAZY,cascade={CascadeType.ALL})
private List children=new ArrayList();
公共类别(){}
我有一个控制器

  @Transactional 
  public class CategoryService{

  @PersistenceContext
  private EntityManager em;


public void save(Category category) {
     ..
}


public Collection<Category> all() {
    return em
            .createQuery("select category  from Category category",Category.class)
            .getResultList();

}
@Transactional
公共类类别服务{
@持久上下文
私人实体管理者;
公共作废保存(类别){
..
}
公众募捐全部(){
返回em
.createQuery(“从类别中选择类别”,category.class)
.getResultList();
}
当我尝试为她的孩子们加载和打印每个实体时,它成功了,但它处于设置状态。当我在vaadin中使用我的表单时,我调用service.all() 试着做和我一样的事

org.hibernate.LazyInitializationException:延迟启动失败 无法初始化角色集合:models.Category.children 初始化代理-无会话

服务:

@Inject 
public CategoriesView(CategoryService service) { 
    this.service = service; 
    list= (List<Category>) service.all(); 
} 

@Override 
protected Component initContent() { 
    HorizontalLayout layout = new HorizontalLayout(); 
    for (Category cate : list) { 
        System.out.println(cate.getChildren()); 
    }
}
@Inject
公共分类视图(分类服务服务){
服务=服务;
list=(list)service.all();
} 
@凌驾
受保护的组件initContent(){
HorizontalLayout=新建HorizontalLayout();
(类别:列表){
System.out.println(cate.getChildren());
}
}

我该怎么做才能得到想要的结果呢?

我用这种方法解决了我的问题 我在enter方法中初始化了我的数据提供程序,我做到了这一点

    @Override
    public void enter(ViewChangeListener.ViewChangeEvent event) {
    parents = DataProvider.ofCollection(service.all());
    parentGrid.setDataProvider(parents);

}

编辑并将selectionListener放入enter方法

从实体关系中移除级联={CascadeType.ALL}然后检查。@kc007什么也没发生,我想知道我的视图是否有任何注释,这样它就可以保持会话有效。必须在应用程序中添加比例。比例默认情况下,如果为true,则不会加载惰性,则必须将其设为false,我不记得需要检查该属性名称,然后它就可以工作了,让我检查一下.您能否将方法@transactional表示法放入服务和check@kc007已经有一个:/