|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
Добрый день. Пишу обычное CRUD приложение. Не знаю как правильно написать пост запрос. Само приложение следующее: есть две сущности Instructor и Course. Один инструктор может вести несколько курсов. Нужно обрабатывать пост запрос, в котором перечислены инструктора и курсы, которые они ведут. Вот сами сущности: Инструктор: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Курс: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Вот структура базы данных: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Вот рест контроллер: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Делаю POST запрос вот с таким содержимым: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Ответ от сервера приходит правильный, т.е. для каждого инструктора и курса назначаются id, в логах hibernate пишет, что происходит вставка в таблицы intructor и course. Но сами курсы в базу данных записываются не полностью: сохраняет название курса, a instructor_id нет, хотя по идее должен. Кто подскажет, почему такой пост запрос не пишет в базу данных информацию по курсам? Полный код можно посмотреть вот здесь . ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2019, 17:10 |
|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
maxim.popov, не использовал никогда маппер, но что-то мне подсказывает что просто по названию он не смапит, попробуйде в Джейсон инструктор_ид добавить. Либо, возможно смапит, если поле нейм в инструкторе сделать уникальным ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 10:39 |
|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
artas, От сервера ответ приходи правильный: и для курсов, и для инструктора назначаются правильные id. Только в таблицу с курсами id инструкторов не пишутся. Почему, я понять не могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 13:48 |
|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
Сейчас переписал @PostMapping вот так: Код: java 1. 2. 3. 4. 5. 6. 7.
Т.е. "ручками" выставляю инструктора для каждого курса. Кто подскажет, коректно и допустимо так писать контроллеры, или это натуральный говнокод? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 16:39 |
|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
maxim.popov, http://devdoc.net/javaweb/hibernate/Hibernate-5.1.0/userGuide/en-US/html/ch03.html#d5e249 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 17:26 |
|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
Андрей Панфилов, Так как тогда правильно написать @PostMapping для двунаправленной связи @OneToMany? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 19:58 |
|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
maxim.popov, я ваш вопрос не понимаю. Вы используете три технологии: - webmvc - mapstruct - hibernate и априори ни одна из них из коробки консистентность двунаправленных связей не поддерживает: webmvc и mapstruct вообще про эту концепцию ничего не знают и там нужно руками делать, т.е. либо писать код в webmvc как вы сделали, либо @AfterMapping в mapstruct, а в хибернейте оно по-умолчанию выключено (включается либо при компиляции либо в рантайме через указание org.hibernate.jpa.AvailableSettings#ENHANCER_ENABLE_ASSOCIATION_MANAGEMENT в свойствах JPA у EMF) - в каком месте это делать решать вам, но сама по себе идея делать двунаправленные связи изначально плохая, со стороны хибера оно полезно только в двух случаях: - кеширование данных на уровне сессии - возможность писать более сложные запросы на JPQL и производных а так оно только вредит ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 20:27 |
|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
Андрей Панфиловmaxim.popov, я ваш вопрос не понимаю. Вы используете три технологии: - webmvc - mapstruct - hibernate и априори ни одна из них из коробки консистентность двунаправленных связей не поддерживает: webmvc и mapstruct вообще про эту концепцию ничего не знают и там нужно руками делать, т.е. либо писать код в webmvc как вы сделали, либо @AfterMapping в mapstruct, а в хибернейте оно по-умолчанию выключено (включается либо при компиляции либо в рантайме через указание org.hibernate.jpa.AvailableSettings#ENHANCER_ENABLE_ASSOCIATION_MANAGEMENT в свойствах JPA у EMF) - в каком месте это делать решать вам, но сама по себе идея делать двунаправленные связи изначально плохая, со стороны хибера оно полезно только в двух случаях: - кеширование данных на уровне сессии - возможность писать более сложные запросы на JPQL и производных а так оно только вредит Вопрос очень простой. Есть две сущности, между которыми двунаправленная связь oneToMany. Нужно написать @PostMapping, который на вход получает json, и пишет сущности в базу данных. База данных postgres, используем orm hibernate. Пример json`а и ссылку на git указал в первом посте. Как бы вы решали данную задачу? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2019, 10:29 |
|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
maxim.popovКак бы вы решали данную задачу?Делать в хибере или mapstruct не особо правильно, потому как будет проблема с безопасностью: как только ваш mapstruct научится обновлять сущности, получится так, что через v1/instructor можно будет у существующих курсов перебивать инструктора - это неправильно. Наиболее предпочтительный вариант - это когда мы с инструктором работаем через один endpoint, а с курсами через другой, т.е. в вашем случае получится два запроса к серверу, если так нельзя, то лично у меня был бы еще один слой, независящий от http. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2019, 11:12 |
|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
Андрей Панфиловmaxim.popovКак бы вы решали данную задачу?Делать в хибере или mapstruct не особо правильно, потому как будет проблема с безопасностью: как только ваш mapstruct научится обновлять сущности, получится так, что через v1/instructor можно будет у существующих курсов перебивать инструктора - это неправильно. Наиболее предпочтительный вариант - это когда мы с инструктором работаем через один endpoint, а с курсами через другой, т.е. в вашем случае получится два запроса к серверу, если так нельзя, то лично у меня был бы еще один слой, независящий от http. Андрей, а можете подробнее рассказать про способ решения с еще одним слоем, который не зависит от http. Не очень понимаю, как это реализовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2019, 11:28 |
|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
maxim.popov, ну вот есть у вас уже InstructorService, пусть он из DTO преобразует и сохраняет как нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2019, 11:45 |
|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
Андрей Панфилов, Всё, понял. Вот этот кусок: Код: java 1. 2. 3. 4.
перенести на уровень сервиса. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2019, 12:33 |
|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
maxim.popovВсё, понял. Вот этот кусок: Код: java 1. 2. 3. 4.
Ну раз понял, тогда можно бы ответит на вопрос - а что делает данный код? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2019, 12:52 |
|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
alex55555maxim.popovВсё, понял. Вот этот кусок: Код: java 1. 2. 3. 4.
Ну раз понял, тогда можно бы ответит на вопрос - а что делает данный код? Назначает каждому курсу соответствующего инструктора. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2019, 13:23 |
|
Spring boot & hibernate: помогите написать правильно @PostMapping
|
|||
---|---|---|---|
#18+
maxim.popovНазначает каждому курсу соответствующего инструктора. А откуда берётся информация для назначения? ЗЫ. Интересно, сколько вопросов понадобится, что бы чел. понял очевидное? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2019, 12:14 |
|
|
start [/forum/topic.php?fid=59&msg=39812078&tid=2121314]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
320ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 232ms |
total: | 657ms |
0 / 0 |