Keaz
Keaz

Reputation: 985

Spring data duplicate key value after CrudRepository.save method call

I'm working on my personal project, and there I observe a strange behaviour in spring CrudRepository.save. There is a unique constraint in one of the field. When I save a new record with a duplicate value for this field, I didn't get any exception until the request handler method completes. Is this a normal behaviour? DB is 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());

This entire method get called without any exception.

Upvotes: 0

Views: 1219

Answers (1)

semicolon
semicolon

Reputation: 545

What you might be missing is that save method will commit to DB after transaction is completed, generally end of method execution. If you want to save to DB at that time only, use saveAndFlush.

Also if you want, you can make sure that your repo methods are using a new transactions and not same as that of its caller methods. So that when repo method call is completed, it will save transaction data into DB.

Upvotes: 2

Related Questions