是的,這裏是一個Spring Data Neo4j 4(當前版本爲M1)的例子。請注意,您可以如何控制持久化範圍或「深度」,以便能夠控制相關實體的獲取。
Application.java
@NodeEntity
public class Application {
Long id;
String name;
@Relationship(type="HAS_VERSION", direction = "OUTGOING")
Set<Version> versions = new HashSet<>();
public Application() {
}
public Application(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void addVersion(Version version) {
versions.add(version);
}
public Set<Version> getVersions() {
return versions;
}
public Long getId() {
return id;
}
}
Version.java
@NodeEntity
public class Version {
Long id;
String versionNumber;
@Relationship(type = "HAS_VERSION", direction = "INCOMING")
Application application;
public Version() {
}
public Version(String versionNumber) {
this.versionNumber = versionNumber;
}
public String getVersionNumber() {
return versionNumber;
}
public void setVersionNumber(String versionNumber) {
this.versionNumber = versionNumber;
}
public Application getApplication() {
return application;
}
public void setApplication(Application application) {
this.application = application;
}
public Long getId() {
return id;
}
}
庫
public interface VersionRepository extends GraphRepository<Version> {
}
public interface ApplicationRepository extends GraphRepository<Application>{
}
和測試:
@Test
public void testDomain() {
Application foo = new Application("Foo");
Version foo10 = new Version("1.0"); //create a NEW version
Version foo11 = new Version("1.1"); //create a NEW version
Version foo20 = new Version("2.0"); //create a NEW version
foo.addVersion(foo10);
foo.addVersion(foo11);
foo.addVersion(foo20);
applicationRepository.save(foo);
Application bar = new Application("Bar");
Version bar10 = new Version("1.0"); //create a NEW version
Version bar20 = new Version("2.0"); //create a NEW version
Version bar30 = new Version("3.0"); //create a NEW version
bar.addVersion(bar10);
bar.addVersion(bar20);
bar.addVersion(bar30);
applicationRepository.save(bar);
session.clear();
assertEquals(2, applicationRepository.count()); //2 apps
assertEquals(6, versionRepository.count()); //6 versions
session.clear();
Application barWithoutVersionsLoaded =
applicationRepository.findOne(bar.getId(),0);
//Depth=0 will only load the application and properties on the application node
//but not its related objects.
//If you don't specify depth, it defaults to 1
assertEquals("Bar", barWithoutVersionsLoaded.getName());
assertEquals(0, barWithoutVersionsLoaded.getVersions().size()); //No versions loaded
}