У меня есть интерфейс, который расширяет CrudRepository, и каждый раз, когда я сохраняю объект с уже существующим ключом, он перезаписывает существующий объект новым. Как я могу переопределить save
так, чтобы он проверял, существует ли объект с этим ключом?Репозиторий CRUD: переопределить сохранение для реализации существует
Я уже пробовал следующие, но это не сработало:
public interface CustomRepo {
public Channel save(Channel channel);
}
public class RepositoryImpl implements CustomRepo {
@Autowired
private DynamoDBMapper mapper;
public Channel save(Channel channel){
channel.setId(UUID.randomUUID().toString());
DynamoDBSaveExpression saveExpression = new DynamoDBSaveExpression();
Map<String, ExpectedAttributeValue> expectedAttributes =
ImmutableMap.<String, ExpectedAttributeValue>builder()
.put(channel.getUrl(), new ExpectedAttributeValue(false))
.put(channel.getTitle(), new ExpectedAttributeValue(false))
.build();
saveExpression.setExpected(expectedAttributes);
saveExpression.setConditionalOperator(ConditionalOperator.AND);
try {
mapper.save(channel, saveExpression);
} catch (ConditionalCheckFailedException e) {
System.err.println("Item with URL {} already exists. Cannot overrwrite."+ channel.getUrl());
System.err.println(e.getMessage());
}
return channel;
}
public interface ChannelRepository extends CrudRepository<Channel, String>, CustomRepo {
@EnableScan
List<Channel> findByTitle(String title);
@Override
@EnableScan
List<Channel> findAll();
List<Channel> findByUrl(String url);
}
Это хороший ответ - один, что я, вероятно, использовать в некоторые возможности. Но я специально спросил об переопределении метода сохранения для определения моей собственной логики сохранения. – acs254