java - Neo4j 保存@Relationship 数据
问题描述
这是 MVCE:https ://github.com/neo4j-examples/movies-java-spring-data-neo4j 如果您将一项测试更改为:
@Test
public void testFindByTitle() {
String title = "The Matrix";
Movie result = movieRepository.findByTitle(title);
Person p = personRepository.findByName("Keanu Reeves");
assertNotNull(result);
assertEquals(1999, result.getReleased());
}
您可以在调试模式下看到该对象p
没有任何movies
.
Person
实体是:
@NodeEntity
public class Person {
@Id
@GeneratedValue
private Long id;
private String name;
private int born;
@Relationship(type = "ACTED_IN")
private List<Movie> movies = new ArrayList<>();
public Person() {
}
public Person(String name, int born) {
this.name = name;
this.born = born;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public int getBorn() {
return born;
}
public List<Movie> getMovies() {
return movies;
}
}
这是来自 neo4j 的官方示例。我怎样才能在数据库中存储实体并Person
拥有实体?movies
Movie
roles
编辑:我能做的是添加Person
实体方法:
public void addMovie(Movie movie) {
if (this.movies == null) {
this.movies = new ArrayList<>();
}
this.movies.add(movie);
}
并在测试中添加:
p.addMovie(matrix);
personRepository.save(p);
但我不喜欢这样 - 因为我从两个站点手动设置它。
解决方案
您无需从两侧手动设置参考。将您的代码片段稍微扩展一行movie.setPerson(this);
,您就完成了:
public void addMovie(@NotNull Movie movie) {
if (this.movies == null)
this.movies = new ArrayList<>();
this.movies.add(movie);
movie.setPerson(this);
}
推荐阅读
- scikit-learn - ImportError:无法导入名称“_print_elapsed_time”
- c# - asp.net textbox lostfocus javascript调用,代码看起来不错但无法编译
- php - Magento - 在我的主题 After_Body_Start 的所有页面上添加一些 HTML/php/JS
- swift - 我无法将 MacPorts 的 /opt/local/include/ncurses.h 导入到我的 Swift 项目中。它与 macOS SDK /usr/include/curses.h 冲突。有什么提示吗?
- python - Apache Beam 管道中的 Conda 依赖项
- netbeans - 我可以更改 netbeans IDE 6.5.1 的外观吗
- swift - 从'字典中获取值
.价值观' - c - 为什么这两个相同的函数执行时间大不相同?
- sql - 由于“指定的事件类型在指定的目标对象上无效”,无法在 SQL 表上创建触发器。
- python - 在 Conda 中取消设置代理