Java 未能延迟初始化集合和vaadin
你好,我的实体的vaadin和lazy负载有问题 我的实体以这种方式包含一对多和多对一的关系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
@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已经有一个:/