我正在做我的个人项目,在那里我观察到Spring一个奇怪的行为 CrudRepository.save
. 其中一个字段中存在唯一约束。当我为这个字段保存一个具有重复值的新记录时,在请求处理程序方法完成之前,我没有得到任何异常。这是正常行为吗?db是postgres
RuleSet save = ruleSetRepository.save(convertToRuleSet(request));
fileRepository.createRuleSet(request);
try {
gitRepository.commitAddPush(request.getRuleSetName(), "Added rule set " + request.getRuleSetName(), gitVersion);
} catch (GenericGitException gitException) {
fileRepository.deleteClassDirectory(request.getRuleSetName());
fileRepository.deleteRuleSet(request.getRuleSetName());
throw new CommonRuleCreateException(gitException.getMessage());
}
return new RuleSetResponse(save.getId(), save.getName(), save.getDescription(),save.getPackageName());
整个方法都会被毫无例外地调用。
1条答案
按热度按时间p8h8hvxi1#
请添加代码以供将来参考,而不是图片。
现在说到你的问题,
你可能缺少的是
save
方法将在事务完成后提交给db,通常在方法执行结束时提交。如果只想在此时保存到db,请使用saveAndFlush
.如果需要,还可以确保repo方法使用的是新的事务,而不是其调用方方法。这样,当repo方法调用完成时,它会将事务数据保存到数据库中。
我希望这对你的问题有帮助。如果我有误解,请添加您的代码并详细解释您的错误和行为,我会尽力帮您解决。
祝你好运,学习愉快!!