我有Hotel
,Manager
,Client
个实体,必须使用@ManyToOne
或@OneToOne
({{1} },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;
}
引用所有3个类,我可以将父类Contact
与HaveContact
一起使用,并从中扩展@Inheritance
,Hotel
,{{1 }}。
接下来,我需要Manager
引用Client
或Person
,但不要引用Hotel。我将使用@Inheritance创建新的父类Manager
,但是java不允许从两个类Client
和Have HavePerson
Person继承Client。我可以使用接口而不是超类,因为我可以在一个类上实现几个接口,但是Hibernate不会在接口字段上映射HaveContact
。
另一种选择是让所有类只有一个父对象,并在可以将属性引用到几个类的任何时候引用它。尽管这对我来说似乎很危险。
我发现了带有enter code here
,@ManyToOne
的示例,但是我想对@Any
这样的通用域对象拥有一个新功能-将它们放在单独的Maven库中。很少有微服务可以使用相同的@AnyMetDef
,Comment
,Contact
实体。如果我将它们放在库中,我将不知道在Address
中提及它们的类的列表,例如
Person
最后一种方法是使Contact不是Hibernate可管理的实体,而只是POJO。创建将具有本机查询的DAO,从中获取数据以构造此类。因此,找到@MetaValue
数据的方法将接受targetEntity = Hotel.class, value = "Hotel"
和Contact
。这迫使我离开JPA查询和Spring String className
接口的便捷方法。
如何使Long Id
引用JpaRepository
,Contact
,Hotel
和Manager
引用Client
,Person
并使Manager
和Client
能够存储在库(jar)中?