Java 调用CrudRepository.save方法后的Spring数据复制键值

Java 调用CrudRepository.save方法后的Spring数据复制键值,java,postgresql,spring-boot,spring-data-jpa,Java,Postgresql,Spring Boot,Spring Data Jpa,我正在做我的个人项目,在那里我观察到春天有一种奇怪的行为crudepository.save。其中一个字段中存在唯一约束。当我为这个字段保存一个具有重复值的新记录时,在请求处理程序方法完成之前,我没有得到任何异常。这是正常的行为吗? DB是Postgres RuleSet save=ruleSetRepository.save(convertToRuleSet(request)); fileRepository.createRuleSet(请求); 试一试{ gitRepository.comm

我正在做我的个人项目,在那里我观察到春天有一种奇怪的行为
crudepository.save
。其中一个字段中存在唯一约束。当我为这个字段保存一个具有重复值的新记录时,在请求处理程序方法完成之前,我没有得到任何异常。这是正常的行为吗? DB是Postgres

RuleSet save=ruleSetRepository.save(convertToRuleSet(request));
fileRepository.createRuleSet(请求);
试一试{
gitRepository.commitAddPush(request.getRuleSetName(),“添加的规则集”+request.getRuleSetName(),gitVersion);
}捕获(GenericGitException gitException){
fileRepository.deleteClassDirectory(request.getRuleSetName());
fileRepository.deleteRuleSet(request.getRuleSetName());
抛出新的CommonRuleCreateException(gitException.getMessage());
}
返回新的RuleSetResponse(save.getId()、save.getName()、save.getDescription()、save.getPackageName());

将毫无例外地调用整个方法。

请添加代码以供将来参考,而不是图片

现在来问你的问题

您可能缺少的是
save
方法将在事务完成后提交给DB,通常是方法执行结束。如果只想在此时保存到DB,请使用
saveAndFlush

如果需要,还可以确保repo方法使用的是新事务,而不是与调用方方法相同的事务。这样,当repo方法调用完成时,它会将事务数据保存到数据库中

我希望这对你的问题有所帮助。如果我有误解,请添加您的代码并详细解释您的错误和行为,我会尽力帮助您


祝你好运,学习愉快

谢谢,@Hülya我更新了问题