Создать конечную точку с отношениями без упругости данных - PullRequest
0 голосов
/ 19 марта 2020

Я создал java проект, используя инструмент Spring Initializr. У меня есть два ресурса: users и trainingRoutines.

Я бы хотел контролировать конечные точки, которые я выставляю. Чтобы избежать захвата Spring Data Rest, я задаю @RestResource(exported = false) в объявлении хранилища.

То, что я пытаюсь сделать sh, - это возможность вызова POST /training-routines с:

{
    "title": "test",
    "goal" : "test",
    "startDate": "2020-03-17",
    "userId": 1
}

С учетом вышеприведенного запроса я ожидаю, что моя конечная точка создаст программу тренировки и свяжет ее с пользователем с идентификатором 1.

С чем я борюсь, так это с работой отношения. Я думал, что это будет работать, устанавливая отношения:

// TrainingRoutine.kt
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
lateinit var user : User
// User.kt
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
lateinit var trainingRoutines : Set<TrainingRoutine>

Мой контроллер / служба выглядит так:

        val user : User = this.userService.findById(newTrainingRoutine.user.id)
        newTrainingRoutine.user = user

        return trainingRoutineRepository.save(newTrainingRoutine)

И хранилище для ресурсов выглядит так:

@RestResource(exported = false)
public interface UserRepository: CrudRepository<User, Int> {
}

У меня есть несколько вопросов:

1 - я не могу заставить его работать, отправив userId: 1 в полезную нагрузку запроса. Только если я отправлю user: { "id": 1 }. Что я могу сделать, чтобы заставить его работать с userId: 1

2- Есть ли способ избежать ручного поиска пользователя и установки его в экземпляр trainingRoutine?

3- Есть ли совершенно другой и лучший способ справиться с этим? Это кажется довольно простым запросом, и я уверен, что есть простой и элегантный способ выполнить sh это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...