我有两个实体:Manager和Project。我想分别保存它们,并在需要时更新从Manager到Project的链接。但这不起作用。
代码如下:
@Test
void updateProjectInManager() {
Manager oldManager = new Manager();
Manager savedOldManager = managerRepository.save(oldManager);
Project newProject = new Project();
savedOldManager.setProject(newProject);
managerRepository.save(savedOldManager); //it works
}
@Test
void updateProjectInManagerIfProjectExists() {
Manager oldManager = new Manager();
Manager savedOldManager = managerRepository.save(oldManager);
Project newProject = new Project();
Project savedProject = projectRepository.save(newProject); //it breaks everything
savedOldManager.setProject(savedProject);
managerRepository.save(savedOldManager); //it fails as it tries to insert savedProject again
}
字符串
第一次测试工作。第二次测试失败,表项目上出现“唯一索引或主键冲突”。
实际上,这个错误是有道理的:看起来像是Spring第二次尝试将实体Project插入到projects表中,并且失败了,因为它已经在那里了。但是我怎么才能链接它们呢?
请记住,我使用的是Spring Data JDBC,而不是Spring Data JPA。
1条答案
按热度按时间lmvvr0a81#
如果你有一个存储库,它们都是独立的聚合。聚合之间的引用必须建模为简单的id,或者更好的是 Package id的
AggregrateReference
。参见https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates/