我有一个实体,它有几个字段的类型集。当我从数据库中检索实体时,集合总是空的,即使数据库中的关联是正确的。
@Valid
@NotNull
@OneToMany(fetch = FetchType.EAGER)
private Set<Location> locations;
我试过启用急切抓取,以强制hibernate在检索实体时加载关联,但它总是空的。具有非集合类型的其他字段被正确填充。
我从来没有见过hibernate出现这种情况,我是不是做错了什么?
谢谢
发布于 2017-04-05 21:14:02
不是100%,而是99%确定您需要将cascade
添加到您的@OneToMany
中-默认的级联是完全不级联的,这意味着如果您持久化实体,Location
集合将不会持久化。
试试这个:
@Valid
@NotNull
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Set<Location> locations;
换句话说,您的问题不是集合没有被获取,而是它一开始就没有被持久化(您在位置和连接表中看到什么了吗?)
编辑-我现在看到您编写的关联是正确的,那么您是否单独地持久化您的Location对象?
发布于 2017-04-05 23:11:32
我想您遗漏了mappedBy属性。
@OneToMany(fetch = FetchType.EAGER, mappedBy="fieldname")
其中fieldname应为Location实体中引用字段的名称
https://stackoverflow.com/questions/43241048
复制