[英]Hibernate Mapping - Joining two tables with an association table - But with a twist
我有以下实体... Customer
, Card
和Address
顾客:
{
private String cust_id; // Primary key
.....
@OneToOne
Address address; // I want to load address of the customer.
// Can change the association to @OneToMany, if needed
}
卡:
{
private String card_id; // Primary Key
private String cust_id; // Foreign Key to Customer.cust_id
....
}
地址:
{
private String card_id; // Foreign key to card.card_id
private String address1;
.....
}
当我加载客户时,我想加载带有关联表Card
地址。 但棘手的部分是Address
没有主键。 它只有一个外键。
您可以在@OneToOne之后使用注释@JoinTable指向卡的表,因此您不需要卡的实体,但如果卡的表不仅仅是关系表,您可以将用户卡中的卡映射为@OneToOne并有一个@Transient'getAddress()'方法返回'this.card.getAddress()',但在卡的实体上你必须映射地址和卡之间的关系(@OneToOne(mappedBy ='card_id')),并在地址你可以将card_id映射为@Id。
第一选择
顾客:
@OneToOne
@JoinTable(name="card", joinColumns = @JoinColumn(name="cust_id"),
inverseJoinColumns = @JoinColumn(name="card_id"))
private Address address;
第二种选择
顾客:
@OneToOne(mappedBy="cust_id")
private Card card;
...
@Transient
public Address getAddress(){
return this.card == null ? null : this.card.getAddress();
}
卡:
@OneToOne(mappedBy="card_id")
private Address address;
地址:
@Id
private String card_id;
在第二种情况下,卡有一个由两个fks(客户和地址)组成的嵌入式pk
卡:
@EmbeddedId
private CustomerAddressPK id;
CustomerAddressPK
@Embeddable
public class CustomerAddressPK(){
private String cust_id;
private String card_id;
}
Customer
和Address
之间的映射可以使用Dependent对象的概念。
查看文档,您将找到类似的示例,其中Person
实体与名为Name
依赖对象之间存在映射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.