source

Spring MongoRepository가 삽입하는 대신 업데이트 중이거나 다시 시작되고 있습니다.

ittop 2023. 7. 1. 09:59
반응형

Spring MongoRepository가 삽입하는 대신 업데이트 중이거나 다시 시작되고 있습니다.

사용 중:

org.springframework.data.mongodb.repository.MongoRepository

빈 DB로 시작하여 다음을 사용하여 개체를 만듭니다._id = 1234예를 들어, 다른 문자열 필드를 다음으로 설정합니다.hello예를 들어, 다음을 수행합니다.

repository.save(object);

MondoDB에 문서를 저장합니다.

새 개체를 생성하고 동일하게 설정합니다._id = 1234그러나 다른 String 필드를 다음으로 설정합니다.world다른 저장으로 이동합니다.

repository.save(newObject);

결과: 저장은 작동하지만 원래 개체를 업데이트합니다.

예상 결과:이 작업은 실패하고 다음 오류가 발생합니다.DuplicateKeyException~하듯이_id고유하며 저장할 때마다 두 개의 개체를 사용합니다.

봄에 결함이 있거나 내가 뭔가 잘못하고 있습니까?

정의에 따라 저장은 업셋 스타일로 개체를 업데이트하고, 있으면 업데이트하고, 없으면 삽입합니다.읽어보기saveMongoDb 웹 사이트의 작업 설명서

mongodb의 삽입 작업은 당신이 예상하는 동작을 가지고 있지만, MongoRepository 문서에서는 삽입이 저장하도록 위임된 것으로 나타나서 아무런 차이가 없습니다.하지만 여러분은 그것이 여러분에게 효과가 있는지 한번 시도해 볼 수 있습니다.그렇지 않으면 인덱스 조회이므로 개체가 있는지 확인하기 전에 get을 수행하면 됩니다.

편집: 저장소 버전을 확인하십시오. insert는 버전 1.7에서 도입되었습니다.

오랜 어려움 끝에 필드 중 하나에 대한 @Id 주석이 있을 때만 애플리케이션이 업데이트됩니다.

@Document(collection="bus")
public class Bus {

//  @Indexed(unique=true, direction=IndexDirection.DESCENDING, dropDups=true)
    @Id
    private String busTitle; 
    private int totalNoOfSeats;
    private int noOfSeatsAvailable; 
    private String busType; 
}

하지만 왠지 @Indexed(unique=true, direction=)를 사용할 수 없었습니다.인덱스 방향.내림차순, dropDups=true)

언급URL : https://stackoverflow.com/questions/29032981/spring-mongorepository-is-updating-or-upserting-instead-of-inserting

반응형