我正面临着Hibernate的奇怪问题,并且没有想到为什么会发生这种情况。
我的类别实体是以一对多关系自我加入的:
@ManyToOne
@JoinColumn(name = "PARENT")
private Category parentCategory;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "parentCategory", orphanRemoval=true)
@Cascade(CascadeType.SAVE_UPDATE)
private Set<Category> childrenCategories;
我正在以这种方式保存父母和孩子之间的关系:
//passing preselected parentCategory and creating newCategory
newCategory.setParentCategory(parentCategory);
sessionFactory.getCurrentSession().save(newCategory);
这导致DB中有两行:
ID|NAME |PARENT
1 |Test |(null)
2 |Test2|1
当#1是父母而#2是孩子时,似乎没问题。
我从DB获取数据:
(Category) sessionFactory.getCurrentSession().get(Category.class, id);
当我使用#1执行此操作时 - 一切正常,Hibernates获得完整的对象,填充Set。但是,当我试图获得#2时,Hibernate实际上只映射了ID字段:
Category@...
childrenCategories null
id Integer (id=111)
name null
parentCategory null
products null
后面会在代码中导致多个NPE。
这种行为可能是什么原因?从我的角度来看,所有关系都设置正确。此外,我试图用类似的方法在我的弹簧上下文之外创建类似的类,一切似乎都没问题。
感谢您的任何建议。