休眠多个表的单个外键

时间:2019-04-27 09:04:42

标签: hibernate

是否可以为两个表添加单个外键。假设有三个表VendorCustomerContact。想以@OneToMany关系的形式进行联系。 因此,考虑采用一个名为object_id的通用ID并想知道object_type是供应商还是客户。

在联系人课程中

@Column(name = "object_type", nullable = false)
private String objectType;

@ManyToOne
@JoinColumn(name="object_id",referencedColumnName="id" ,insertable=false, updatable=false)
private Vendor vendor;

@ManyToOne
@JoinColumn(name="object_id",referencedColumnName="id",insertable=false, updatable=false)
private Customer customer;

但是它没有为供应商和客户表都添加外键。 如果触发

,则只有一个sql休眠

变更表联络人        添加约束FKj3890q987sngeflip2ex9b85j        外键(object_id)        引用客户(id)

我可以这样做吗?或者还有其他更好的方法来处理这种情况吗?

1 个答案:

答案 0 :(得分:0)

如果(联系人是一对多的关系)

@OneToMany
@JoinColumn(name="object_id",referencedColumnName="id" ,insertable=false, updatable=false)
private List<Vendor> vendors;

@OneToMany
@JoinColumn(name="object_id",referencedColumnName="id",insertable=false, updatable=false)
private List<Customer> customer;

否则,如果联系是一对多的,则在供应商和客户类中定义外键,而不是在联系类中,每个外键都将具有一个字段,如

@OneToMany
@JoinColumn(name="id",referencedColumnName="object_id" ,insertable=false, updatable=false)
private List<Contact> contacts;

也请注意LazyFetch或最好将其设置为false

@LazyCollection(LazyCollectionOption.FALSE)