【发布时间】:2023-04-06 18:51:01
【问题描述】:
我正在尝试找出在休眠中完成关系的最佳方式。我有一个客户对象。每个客户都有一个技术联系人、一个计费联系人和一个销售联系人。每种类型的联系人都有完全相同的数据结构(电话、电子邮件、地址等)。
我的第一个想法是创建一个 Contact 表,然后在 Customer 表中有三列 - sales_contact、billing_contact、technical_contact。这将在相同的两个表之间建立三个不同的外键一对一关系。但是,我发现这在 Hibernate 中很难映射,至少使用注解。
另一个想法是使其成为多对多关系,并在映射表中具有类型标志。因此,任何客户都可以有多个联系人(尽管在这种情况下不超过三个),并且任何联系人都可以属于多个客户。不过,我也不知道如何映射那个。会是地图表上的类型字段吗?这个属性会出现在 Contact java 模型对象上吗? Customer 模型是否有一组 Contact 对象。还是三个不同的单独联系人对象?
所以我真的在这里寻找两件事 - 1. 在数据库中实现这一点的最佳方法是什么,以及 2. 如何使用注释制作 Hibernate 映射?
【问题讨论】:
-
为什么你觉得很难映射? @JoinColumn 肯定会粉碎这个吗?
-
如果列在相关表上的名称不同,@JoinColumn 是否有效?在 Customer 中,列名将是“sales_contact_id”,而在 Contact 中,列名将是“contact_id”——如果我使用 @JoinColumn(name="sales_contact_id") 进行注释,Hibernate 会知道将其映射到“contact_id”吗?跨度>
-
当然,前提是 Contact 或任何它自己的表。
-
果然 - 我猜我有点超前了。谢谢!