要点:
使用SDN4
,我将持久保存10个对象,其中一半具有相同的内容,只有它们所链接的ID不同。链接ID设置为@Transient
。仍然,使用相同的内容创建两个对象,而不是一个具有两个链接的对象。我该如何避免这种行为?
详情: 我们通过CSV定义了两个域对象和信息源,它们如下所示:
域对象A CSV:
key,name
1,test1
3,test3
POJO A:
@Transient
private int key;
private String name;
@Relationship(type = "HAS_CERTIFICATION", direction = "OUTGOING")
private Set<B> bObject = new HashSet<>();
public void setName(String name) {
this.name = name;
}
@Relationship(type = "HAS_CERTIFICATION", direction = "OUTGOING")
public void hasCertification(B b) {
bObject.add(b);
b.getA().add(this);
}
域对象B:
foreignKey,name,value
1,ISO9001,TRUE
1,ISO14001,TRUE
3,ISO9001,TRUE
3,ISO14001,TRUE
POJO B:
@Transient
private int foreignKey;
private String name;
private String value;
@Relationship(type = "HAS_CERTIFICATION", direction = "INCOMING")
private Set<A> a = new HashSet<>();
public void setName(String name) {
this.name = name;
}
public void setValue(String value) {
this.value = value;
}
@Relationship(type = "HAS_CERTIFICATION", direction = "INCOMING")
public Set<A> getA() {
return a;
}
这些CSV文件在各自的POJO(A和B)中被解析并加载到SDN4中。
现在我们遍历这些对象并添加关系:
private void aHasCertification(
Optional<List<B>> b,
Optional<List<A>> a) {
for (A aObj : a()) {
for (B bObj : b()) {
if(bObj.getForeignKey() == aObj.getKey()) {
aObj.hasCertification(bObj);
}
}
}
}
然后,根存储库repositoryA用于保存加载的对象。 repositoryA.save(domainObjectA);
现在我查询数据库; match n return n;
对于每个A对象,将有两个ISO9001
和两个ISO14001
对象。而不是我期望的,每个都有两个指向A:1
和A:3
的链接。