问题描述
我有一个带有非自动生成的主键的表,它基本上是一个外键。 因此,使用文档中所述的 withId 方法。
https://docs.spring.io/spring-data/r2dbc/docs/1.2.3/reference/html/#reference
创建新实例工作正常。但是,在不选择的情况下更新实例会产生重复错误。它不会将其视为更新并尝试插入记录。
表格:
CREATE TABLE `project_contact` (
`project_id` bigint NOT NULL,`first_name` varchar(25) DEFAULT NULL,`last_name` varchar(25) DEFAULT NULL,`email` varchar(45) NOT NULL,PRIMARY KEY (`client_id`),CONSTRAINT `prj_project_id` FOREIGN KEY (`project_id`) REFERENCES `project` (`project_id`)
)
模型类,
public class ProjectContact {
@Id
private final Long id;
private final long projectId;
private final String firstName;
private final String lastName;
private final String email;
public static ProjectContact of(long projectId,String firstName,String lastName,String email) {
return new ProjectContact(null,projectId,firstName,lastName,email);
}
public ProjectContact(Long id,long projectId,String email) {
super();
this.id = id;
this.projectId = projectId;
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
public ProjectContact withId(Long id) {
return new ProjectContact(id,this.projectId,this.firstName,this.lastName,this.email);
}
}
这里,projectId 是一个外键,因此使用 withId。
创建新实例工作正常。
Project prj = Project.of(....);
projectRespository.save(prj);
在没有选择的情况下更新实例,由于未通过代码设置 id 会引发重复错误。
Project prj = Project.of(....);
projectRespository.save(prj);
错误:-
Caused by: io.r2dbc.spi.R2dbcDataIntegrityViolationException: Duplicate entry '15' for key 'project_contact.PRIMARY'
at dev.miku.r2dbc.MysqL.ExceptionFactory.createException(ExceptionFactory.java:94) ~[r2dbc-MysqL-0.8.2.RELEASE.jar:0.8.2.RELEASE]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ⇢ sql "INSERT INTO project_contact (project_id,first_name,last_name,email) VALUES (?,?,?)" [DatabaseClient]
Stack trace:
at dev.miku.r2dbc.MysqL.ExceptionFactory.createException(ExceptionFactory.java:94) ~[r2dbc-MysqL-0.8.2.RELEASE.jar:0.8.2.RELEASE]
at dev.miku.r2dbc.MysqL.TextQueryHandler.accept(QueryFlow.java:317) ~[r2dbc-MysqL-0.8.2.RELEASE.jar:0.8.2.RELEASE]
at dev.miku.r2dbc.MysqL.TextQueryHandler.accept(QueryFlow.java:292) ~[r2dbc-MysqL-0.8.2.RELEASE.jar:0.8.2.RELEASE]
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)