问题描述
环境细节:
Java版本:1.8
neo4j.ogm.version = 3.2.24
neo4j 服务器版本 = 4.3.2
型号详情:
人有很多地址
地址人多
重现步骤
- 创建了两个人和一个地址
- 与此人关联的相同地址
- 救了两个人
方向是人->出地址
预期:两个人都应该与同一个地址实体相关。
实际:最后保存的人是相关的。其他人不相关(悬空)
如果只是用 @Relationship 注释该字段,那么这个人都是相关的。
但是需要在@Relationship 中提供方向。
对象模型
@NodeEntity
public class Person {
@Id
@GeneratedValue
public Long nativeId;
private String name;
@Relationship(type = "addresses",direction = Relationship.OUTGOING)
private Set<Address> addresses;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Address> getAddresses() {
return addresses;
}
public void setAddresses(Set<Address> addresses) {
this.addresses = addresses;
}
public void addAddress(Address address) {
this.addresses = this.addresses == null ? new HashSet<Address>() : this.addresses;
this.addresses.add(address);
}
}
import java.util.Set;
import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.Id;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
@NodeEntity
public class Address {
@Id
@GeneratedValue
public Long nativeId;
private String zipCode;
@Relationship(type = "addresses",direction = Relationship.INCOMING)
private Set<Person> persons;
public String getZipCode() {
return zipCode;
}
public void setZipCode(String zipCode) {
this.zipCode = zipCode;
}
public Set<Person> getPersons() {
return persons;
}
public void setPersons(Set<Person> persons) {
this.persons = persons;
}
}
public class ManytoManyTest {
public static void main(String[] args) {
Configuration configuration = new Configuration.Builder().uri("bolt://localhost").credentials("neo4j","test")
.useNativeTypes().verifyConnection(true).build();
SessionFactory sessionFactory = new SessionFactory(configuration,"com.domain.model");
Session session = sessionFactory.openSession();
session.beginTransaction();
Person hash = new Person();
hash.setName("hash");
Person dhi = new Person();
dhi.setName("dhi");
Address address = new Address();
address.setZipCode("560001");
hash.addAddress(address);
dhi.addAddress(address);
session.save(hash);
session.save(dhi);
session.getTransaction().commit();
sessionFactory.close();
}
}
图中的示例输出 dandling person node in graph
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)