Ich habe eine Schnittstelle, die CrudRepository erweitert, und jedes Mal, wenn ich ein Objekt mit einem bereits vorhandenen Schlüssel speichern, überschreibt es das vorhandene Objekt mit dem neuen. Wie kann ich save
überschreiben, so dass es überprüft, ob ein Objekt mit diesem Schlüssel bereits existiert?CRUD Repository: Überschreiben speichern zu Implementieren existiert
Ich habe bereits versucht, die folgende, aber es hat nicht funktioniert:
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);
}
Dies ist eine gute Antwort - eine, die ich wahrscheinlich in wird verwenden etwas Kapazität. Aber ich habe speziell gefragt, ob ich die Speichermethode überschreiben soll, um meine eigene Speicherlogik zu definieren. – acs254