是否可以为两个表添加单个外键。假设有三个表Vendor
,Customer
和Contact
。想以@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)
我可以这样做吗?或者还有其他更好的方法来处理这种情况吗?
答案 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)