У меня есть 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
в библиотеке (банке)?