gpt4 book ai didi

java - 在单个类上 hibernate 不同类型的一对一关系

转载 作者:行者123 更新时间:2023-11-30 11:44:49 25 4
gpt4 key购买 nike

我正在尝试找出在 hibernate 状态下建立关系的最佳方式。我有一个客户对象。每个客户都有一个技术联系人、一个计费联系人和一个销售联系人。每种类型的联系人都具有完全相同的数据结构(电话、电子邮件、地址等)。

我的第一个想法是创建一个 Contact 表,然后在 Customer 表中包含三列 - sales_contact、billing_contact、technical_contact。这将在相同的两个表之间建立三个不同的外键一对一关系。但是,我发现这很难在 Hibernate 中映射,至少使用注释是这样。

另一个想法是让它成为多对多关系,并在映射表中有一个类型标志。因此,任何客户都可以有多个联系人(尽管在本例中不超过三个),并且任何联系人都可以属于多个客户。不过,我也不确定如何绘制那个 map 。 map 表上会有一个类型字段吗?这个属性会出现在 Contact java 模型对象上吗? Customer 模型是否有一组 Contact 对象。还是三个不同的单独的联系人对象?

所以我真的在这里寻找两件事 - 1. 在数据库中实现它的最佳方法是什么,以及 2. 如何使用注释制作 Hibernate 映射?

最佳答案

它可以像这样简单:

@Entity
public class Contact {
@Id
private String id;
private String phome;
private String email;
private String address;

// ... Getters and Setters
}

@Entity
public class Customer {

@Id
@GeneratedValue
private String id;

@ManyToOne
@JoinColumn(name = "ID")
private Contact billingContact;

@ManyToOne
@JoinColumn(name = "ID")
private Contact salesContact;

@ManyToOne
@JoinColumn(name = "ID")
private Contact technicalContact;

public Customer() {
}

// ... Getters and Setters
}

现在,如果您想在对象级别区分BillingContactSalesContact,您可以将Contact 抽象化,并在每种类型的联系人中实现。您必须使用 @Inheritance 注释父类以指定您选择的继承策略(SINGLE_TABLE 在这里听起来很合适,它将使用技术鉴别器列 - 参见 http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#d0e1168)。

关于java - 在单个类上 hibernate 不同类型的一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10603319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com