Только одна POJO
модель
Я согласен, что использование одной и той же структуры POJO
для библиотек Hibernate
и Jackson
, вообще говоря, не лучший вариант. Но это также зависит от конкретных сценариев, которые вам нужно реализовать. В вашем случае вам нужно загрузить данные из REST API
и сохранить результат в DB
. Таким образом, в основном вы будете вызывать INSERT
запросов в 90% случаев. Таким образом, вы можете сохранять структуру POJO
очень простой, не беспокоясь о проблемах lazy-loading
В этом сценарии использование такой же структуры POJO
не так уж плохо. Связанный вопрос / ответ говорит только о проблемах с чтением и разоблачением структуры DB
на REST API
, что не относится к данному вопросу.
Вам также необходимо выяснить, чем отличается модель DB
от модели JSON
. Если они похожи, и вы можете сказать 1:1
, нет необходимости создавать дополнительный слой.
Две POJO
модели
В этом сценарии вам необходимо создать две модели POJO
: одну для обработки десериализации JSON
и одну для работы с DB
через ORM
. В этом сценарии самой большой проблемой является сопоставление этих двух моделей. Кроме того, изменения в REST API
распространяются на каждый слой. Вы можете использовать библиотеки карт курса, такие как Dozer , Orika , MapStruct или другие, но всегда есть необходимость поддерживать этот слой. С другой стороны, это очень безопасное решение, потому что вы можете управлять отображением на JSON
и DB
отдельно и хранить разные структуры без большого количества аннотаций или пользовательских десериализаторов, адаптеров и т. Д. С другой стороны, если эти две модели действительно разные, это Решение самое лучшее.
Коллекции и одна POJO
модель
Существует также третий вариант, который я вижу, и он использует библиотеку Java
collection для обработки JSON
полезных нагрузок. JSON Object
соответствует Map<String, Object>
и JSON array
соответствует List<Object>
. Jackson
автоматически позаботится о выборе правильных типов, и вам нужно только сопоставить эти коллекции с POJO
моделью, используемой на стороне ORM
. Это решение устраняет необходимость сохранять две модели, но усложняет отображение слоя и делает его нечетким.
Из предоставленной вами информации я бы начал с первого варианта. В случае, если что-то усложнит создание дополнительной модели и слой отображения с помощью некоторых библиотек, это не должно быть большой проблемой.