2 回答
TA贡献1851条经验 获得超3个赞
为了避免上述异常,有两种可能性:
更改为
或List
Set
使用但不要拿两个袋子。这意味着不要在两个集合上使用。
List
fetchJoin()
滤波:
使用不会筛选条件集合的位置。集合将包含所有关联的对象。加入 JPA 是为了在根对象 - 顺序上创建条件。它与SQL中不同。
可以使用 JPA 2.1 功能来筛选关联的集合。这允许在子句中附加条件JOIN ON
ON
TA贡献1803条经验 获得超3个赞
如果您确实无法使用 Set 而不是 List:
家长.class
@OneToMany(
mappedBy = "parent",
orphanRemoval = true,
cascade = { CascadeType.PERSIST, CascadeType.MERGE }
)
@OrderColumn(name = "position")
private List<Child> childs = new ArrayList<>();
儿童.class
@ManyToOne(fetch = FetchType.LAZY)
private Parent parent;
并在孩子的表格中创建一个名为“位置”的列
ALTER TABLE child ADD COLUMN position integer NOT NULL default 0
如果不能在表中使用其他列,则需要按顺序查询列表。或者使用子级的 id 和自定义 getter。
@OrderColumn(name = "id_child", updatable = false, insertable = false)
public List<Child> getChilds() {
childs.removeAll(Collections.singleton(null));
return childs;
}
添加回答
举报