Как реализовать сложные отношения сущностей в JPA - PullRequest
0 голосов
/ 11 июля 2019

У меня есть семейство сущностей, которые выглядят примерно так:

Company (1    ->    n)  CompanyContact  (n   <-    1) Contact
     \                                                  /  
      \                                                /
       \  (1    ->    n)    User    ( 1     -      1) / 

Чтобы повторить,

Компания имеет отношения OneToMany с CompanyContact (которая является просто объектом, связывающим компанию, контакт и параметр) и отношения OneToMany с пользователем

Контакт имеет отношения OneToMany с CompanyContact и отношения OneToOne с пользователем

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

Проблема может быть продемонстрирована на следующем примере:

Когда я создаю Пользователя, я устанавливаю правильную Компанию и Контакт перед сохранением, и Пользователь сохраняется правильно. Тем не менее, компании и контактные лица в БД все еще не обращают внимания на свои отношения с вновь созданным пользователем.

Если я хочу постоянно обновлять все свои сущности, нужно ли мне обновлять всю цепочку Company-CompanyContact-Contact-User каждый раз? Есть ли лучший способ сделать это?

Я пробовал применять различные каскадные стратегии для отображения отношений на стороне пользователя, например

@ OneToOne (cascade = CascadeType.ALL) частный контакт контакт;

но это по-прежнему не обновляет информацию о компании и контактах.

1 Ответ

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

Я думаю, что ваши занятия не очень хорошо продуманы.

Попробуйте добавить targetEntity

(Необязательно) Класс сущности, являющийся целью ассоциации.Необязательно, только если свойство коллекции определено с использованием обобщений Java.Должно быть указано иначе.

И mappedBy

Поле, которому принадлежит отношение.Требуется, если отношения не являются однонаправленными.

возможно, это поможет:

oracle docs

jpa-hibernate-synchronize-двунаправленный-

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