MongoRepository не связывает вложенный объект с классом, в котором он объявлен - PullRequest
0 голосов
/ 08 ноября 2018

У меня возникают некоторые проблемы с MongoRepository, когда я пытаюсь выполнить публикацию в сервисе FlightClass.

Итак, у меня есть класс Catering

@NoArgsConstructor @Getter @Setter @ToString
@Document(collection = "catering")
public class Catering {

    @Id
    private String id;

    @Indexed(unique = true)
    private String title;

    public Catering(String title) {
        this.title = title;
    }
}

и еще один класс FlightClass.

@NoArgsConstructor @Getter @Setter @ToString
@Document(collection = "flight-class")
public class FlightClass {

    @Id
    private String id;

    private String title;

    @DBRef
    private Catering catering;
}

Я объявил свой репозиторий следующим образом:

@RepositoryRestResource(collectionResourceRel = "classes", path = "classes")
public interface FlightClassRepository extends 
    MongoRepository<FlightClass, String> {
}

Но у меня возникает проблема, когда я пытаюсь сделать POST

{
    "title": "Classic",
    "catering": {
        "id": <some_id_that_already_exists>
    }
}

И по какой-то причине данные пружин не связывают текущую запись с обслуживающей.

Самое странное, что я создал контроллер, подобный приведенному ниже, и он работает.

@PostMapping("/flight-classes")
public ResponseEntity<FlightClass> post(@RequestBody FlightClass flightClass) {
    return new ResponseEntity<>(flightClassRepository.insert(flightClass), HttpStatus.ACCEPTED);
}

Это ошибка в репозитории Mongo? Или я что-то не так делаю?

Это мои зависимости

...
dependencies {
implementation('org.springframework.boot:spring-boot-starter-aop')
implementation('org.springframework.boot:spring-boot-starter-data-mongodb')
implementation('org.springframework.boot:spring-boot-starter-data-rest')
implementation('org.springframework.boot:spring-boot-starter-hateoas')
implementation('org.springframework.boot:spring-boot-starter-web')
runtimeOnly('org.springframework.boot:spring-boot-devtools')
compileOnly('org.projectlombok:lombok')
}

Кто-то имеет представление о том, почему это происходит?

Я хотел бы просто уточнить, что я не пытаюсь делать сохранение в каскаде (я знаю, что это еще не поддерживается платформой). Я уже создал экземпляр питания. Я просто надеялся связать это с классом

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете найти ответ по этой ссылке более конкретно в этих двух строках

flightClass.setCatering(Stream.of(yourObjectfindByID).collect(Collectors.toSet()));
flightClassRepo.save(flightClass);
...