我发现很多关于 orphanRemoval=true 选项的讨论仍然会留下孤儿,但是我似乎没有为我的问题找到正确的答案。
我有一个 Connector 类,它在 UniqueProperty 类的 List 上具有 OneToMany 关系
@OneToMany(cascade = CascadeType.ALL, orphanRemoval=true)
@LazyCollection(LazyCollectionOption.FALSE)
private List<UniqueProperty> uniqueProperties;
UniqueProperty 有这个定义:
@Id
@Column(name = "id", length = 200, unique = true, nullable = false)
private String id;
private String name;
private String type;
@Column(unique=true)
private String value;
protected UniqueProperty(){}
我使用 PostgreSQL 数据库。当我创建一个新的连接器并添加一个 UniqueProperty (name, valueA) 时,它会在 connector_uniqueproperty 表中创建一行,并在 uniqueproperty 表中创建一行。当我创建一个与之前相同 ID 的新连接器实例(新的休眠会话)并且这次不添加唯一属性时,session.saveOrUpdate(connector) 调用确实从 connector_uniqueproperty 中删除了相关行,但将相关行保留在uniqueproperty 表(现在是孤儿)。
关于为什么会发生这种情况的任何建议?