Neo4j OGM 如何删除关系
Neo4j OGM how to delete relationship
我有两个 neo4j-OGM 节点实体连接 属性-less 关系如下:
@NodeEntity
public class User {
@Relationship(type = RelationshipNames.USER_DEVICES, direction = Relationship.UNDIRECTED)
private Set<Device> devices;
}
@NodeEntity
public class Device {
@Relationship(type = RelationshipNames.USER_DEVICES, direction = Relationship.UNDIRECTED)
private User user;
}
当我将设备添加到用户然后执行保存时,我得到这个图表:
稍后,当我从用户设备集中删除设备并保存,将设备用户设置为空并保存时,我仍然有相同的图表,这意味着设备和用户之间的关系仍然存在。
我是不是做错了什么?有办法删除吗?
如果没有看到您编写的保存这些对象的代码,就不容易诊断您的问题。但是,我建议两件事。
首先,我会确保域模型中用户设备引用的添加和删除是由域模型本身管理的。换句话说,在用户 class 上提供 行为 以在添加或删除设备时保持设备对象一致。
addDevice(Device device) {
if (device.user() != null) {
device.user().removeDevice(device)
}
device.setUser(this)
devices.add(device);
}
显然您还需要编写等效的 removeDevice()
。如果您通过用户管理它们,这将确保两个对象正确同步。如果您还打算从设备管理它们,您应该在设备 class 上编写一个等效的 updateUser()
方法来实现相同的效果。
重点是:让您的领域模型来完成这项工作。它更容易推理(和测试),并且您不需要在持久性代码中到处调用 getter 和 setter 来保持一切同步。
如果在进行这些更改后仍然失败,则将 UNDIRECTED 关系设置为一侧为 INCOMING,另一侧为 OUTGOING(哪个无关紧要)。如果这解决了问题,则表明 OGM 中可能存在错误。如果是哪种情况,请在这里报告!
我有两个 neo4j-OGM 节点实体连接 属性-less 关系如下:
@NodeEntity
public class User {
@Relationship(type = RelationshipNames.USER_DEVICES, direction = Relationship.UNDIRECTED)
private Set<Device> devices;
}
@NodeEntity
public class Device {
@Relationship(type = RelationshipNames.USER_DEVICES, direction = Relationship.UNDIRECTED)
private User user;
}
当我将设备添加到用户然后执行保存时,我得到这个图表:
稍后,当我从用户设备集中删除设备并保存,将设备用户设置为空并保存时,我仍然有相同的图表,这意味着设备和用户之间的关系仍然存在。
我是不是做错了什么?有办法删除吗?
如果没有看到您编写的保存这些对象的代码,就不容易诊断您的问题。但是,我建议两件事。
首先,我会确保域模型中用户设备引用的添加和删除是由域模型本身管理的。换句话说,在用户 class 上提供 行为 以在添加或删除设备时保持设备对象一致。
addDevice(Device device) {
if (device.user() != null) {
device.user().removeDevice(device)
}
device.setUser(this)
devices.add(device);
}
显然您还需要编写等效的 removeDevice()
。如果您通过用户管理它们,这将确保两个对象正确同步。如果您还打算从设备管理它们,您应该在设备 class 上编写一个等效的 updateUser()
方法来实现相同的效果。
重点是:让您的领域模型来完成这项工作。它更容易推理(和测试),并且您不需要在持久性代码中到处调用 getter 和 setter 来保持一切同步。
如果在进行这些更改后仍然失败,则将 UNDIRECTED 关系设置为一侧为 INCOMING,另一侧为 OUTGOING(哪个无关紧要)。如果这解决了问题,则表明 OGM 中可能存在错误。如果是哪种情况,请在这里报告!