我在 JPA 中有一个非常标准的 @OneToMany 映射,没有级联(默认设置),如下所示:
@JoinColumn(name = "PARENT_ID")
@OneToMany(fetch = FetchType.LAZY)
@OrderBy("date")
private List<ItemRow> items;
我的问题是,当我尝试 em.merge() 这个实体时,Hibernate 认为如果集合中不存在一个项目,它应该从数据库中删除。鉴于我没有显式调用 em.remove(),生成的 SQL 并没有真正尝试删除项目SET PARENT_ID = NULL,幸运的是,Hibernate 只是尝试执行由于数据库约束而失败的操作。
我不想加载所有项目只是为了将它们的父项保存到数据库中。那将是愚蠢的。我的用户界面是分页的,当客户端发送部分集合时,这并不意味着其他项目应该被删除,我只想插入和更新用户看到的行,并留下未列出的行。
我该怎么办?我应该从父实体中删除集合映射吗?是否有“无级联,真的,仅用于加载”的设置?
我正在使用 JBoss EAP 6.4,其中包含 Hibernate 4.2.18。
守着一只汪
相关分类