Hibernate @ManyToOne отношение к родителю без @Inheritance? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть Hotel, Manager, Client, сущности, и на них необходимо ссылаться из общих сущностей с @ManyToOne или @OneToOne (Address, Contact, Person и т. Д.).

-Hotel
--Address
--Contact
-Manager
--Person
--Contact
-Client
--Address
--Contact
--Person

Рассмотрим Contact сущность.Это должно относиться к Hotel или Manager или Client.В этом примере класса я указал только Hotel класс (как сейчас в моем приложении):

@Entity
public class Contact extends CommentedEntity {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "hotel_id")
    private Hotel hotel;
    private String contactData;
}

Чтобы сделать Contact ссылкой на все 3 класса, я мог бы использовать родительский класс HaveContact с@Inheritance и простираемся от него Hotel, Manager, Client.

Далее мне нужно Person относится к Manager или Client, но не к отелю.Я бы создал новый родительский класс HavePerson с @Inheritance, но java не позволяет наследовать Client от двух классов HaveContact и Have enter code here Person.Я мог бы использовать интерфейсы вместо суперкласса, поскольку у меня может быть несколько интерфейсов, реализованных в одном классе, но Hibernate не будет отображать @ManyToOne в поле интерфейса.

Еще один вариант - иметь одного родителя только для всех классов.и ссылаться на него в любое время, когда свойство можно отнести к нескольким классам.Хотя это выглядит опасно для меня.

Я нашел примеры с: @Any, @AnyMetDef, но я хотел бы иметь еще одну особенность с обычными объектами домена, такими как Comment, - поместить их в отдельныеMaven библиотека.Немногие микросервисы могут использовать одинаковые объекты Contact, Address, Person.Если у меня они есть в библиотеке, я не буду знать список классов, чтобы упомянуть их в @MetaValue, как

targetEntity = Hotel.class, value = "Hotel"

Последний подход заключается в том, чтобы сделать Contact не управляемой сущностью Hibernate, а просто POJO.Создайте DAO, у которого будут собственные запросы, возьмите данные из него, чтобы создать такие классы.Таким образом, метод поиска Contact данных примет String className и Long Id.Это заставляет меня оставлять JPA-запросы и удобные методы интерфейса Spring JpaRepository.

Как это возможно, чтобы Contact ссылался на Hotel, Manager, Client иPerson обратитесь к Manager, Client и сделать возможным сохранение Contact и Person в библиотеке (банке)?

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