日期:2014-05-17  浏览次数:20770 次

hibernate自身一对多的问题,求解
对于像部门或者菜单这种树形结构的自身一对多映射,最顶级是没有PID的,运行的时候报错:
 org.hibernate.ObjectNotFoundException: No row with the given identifier exists


百度谷歌了很多资料都没有好的解决方法POJO是这么写的

    @ManyToOne
@JoinColumn(name="pid")
private CenterInfo parentCenterInfo;
@OneToMany(cascade=CascadeType.ALL, mappedBy="parentCenterInfo" ,fetch=FetchType.LAZY)
@Sort(type=SortType.COMPARATOR,comparator=CenterInfoComparator.class)
private Set<CenterInfo> centerInfos=new TreeSet<CenterInfo>();

怎么解决呢?

------解决方案--------------------
可以先判断有没有父级元素,即parent是否为null,就不会报异常了
------解决方案--------------------
楼主的代码我没有测,但是如下的配置是没有问题。至于楼主所说的最顶级没有parent问题,可以用optional解决。但是貌似问题不是出在楼主所说的最顶级parent没有parent问题这里。希望下面的代码对楼主有帮助。

@ManyToOne(targetEntity=Department.class)
@JoinColumn(name="parentId")
private Department parent;

@OneToMany(mappedBy="parent",cascade=CascadeType.ALL)
@OrderBy(value="id ASC")
private Set<Department> children = new HashSet<Department>();