Как я могу поддержать сериализацию базы данных jpa класса, чей исходный код мне не принадлежит? - PullRequest
0 голосов
/ 02 июля 2019

Если у меня есть сущность, которую я хочу сохранить в базе данных в JPA2, я просто добавляю аннотацию @Entity, а также любые другие, которые определяют ее отношение, и т. Д.

У меня есть несколько классов, которыеиз зависимостей, которыми я не владею, с которыми я хотел бы сделать это.Я думал о некоторых идеях, но я не очень доволен ни одной из них.

  1. Создайте «пустой» подкласс, который просто делегирует вызовы всего для реального класса.Пустой подкласс будет содержать аннотации конфигурации.Я не уверен, что это сработает, потому что я думаю, что вам нужно добавить аннотацию к суперклассу.

  2. Использовать атрибут-конвертер.Это работает хорошо, если я не забочусь об использовании той сущности, которую я импортировал для отношений.Я уже делаю это сейчас для некоторых перечислений.

  3. Я думаю, я мог бы настроить его с persistence.xml?Но я бы хотел избежать этого любой ценой.

Просто, чтобы привести еще один пример того, что я пытаюсь сделать, в Spring вы обычно настраиваете bean-компоненты, помещая в них @Componeont.и украшать класс другими аннотациями JPA.Если, однако, у вас нет класса, у Spring есть простой механизм с аннотацией @Bean, где вы создаете и настраиваете класс внутри метода, который вызывает класс @Configuration, чтобы получить ссылку на эту сущность.Таким образом, вы можете использовать сторонние библиотеки в качестве компонентов, не имея доступа к исходному коду.

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Я закончил тем, что использовал orm.xml для предоставления сопоставлений JPA классам Java, для которых я не контролирую исходный код.

0 голосов
/ 02 июля 2019

Прежде всего, независимо от того, являетесь ли вы владельцем класса, который вы хотите сохранить или нет, вы никогда не должны обозначать свой бизнес-объект с помощью @Entity. Смысл этого довольно прост: база данных является каналом ввода / вывода. Канал ввода / вывода - это деталь. Ваша бизнес-логика должна быть независимой от деталей.

Вам следует сопоставить бизнес-объект с DTO, который передается в DAO, который затем отображает его на объект базы данных и сохраняет его. Не верь мне в этом, это мнение на самом деле исходит от дяди Боба .

Таким образом, ответ таков: преобразовать объект в DTO, передать этот DTO соответствующему DAO, который снова преобразует его в некоторый объект базы данных и сохраняет его.

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