Spring Data JDBC:如何将Entity的引用更新为另一个Entity?

ttp71kqs  于 11个月前  发布在  Spring
关注(0)|答案(1)|浏览(96)

我有两个实体: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。

lmvvr0a8

lmvvr0a81#

如果你有一个存储库,它们都是独立的聚合。聚合之间的引用必须建模为简单的id,或者更好的是 Package id的AggregrateReference。参见https://spring.io/blog/2018/09/24/spring-data-jdbc-references-and-aggregates/

相关问题