如何解决Spring JPA存储库条件重载joinColumn实现
我在这里有我的数据库的一部分,针对问题进行了简化:
Supplier
company_id int
location String
Warehouse
warehouse_id int
location String
Store
store_id int
location String
Shipment
shipment_id int
origin_id int
destination_id int
目的:该系统用于记录和跟踪供应商与仓库之间、仓库与商店之间以及商店之间的发货。
所以最初我计划通过创建 3 个表来实现这一点,每个表存储一种类型的货件,但我意识到我可以通过创建一个名为货件的表来抽象它,因为所有可能的起点和目的地都具有相同的长度和类型( int) 的 ID。我使用shipment.type 来确定来源是供应商、仓库还是商店,反之亦然。我的问题是如何在 JPA 实体中实现它?我目前的伪代码是这样的:
@Entity
@Table(name = "SHIPMENT")
public class Shipment implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "SHIPMENT_ID")
private int shipmentId;
@Column(name = "ORIGIN_TYPE")
private int originType;
@Column(name = "DESTINATION_TYPE")
private int destination_id;
if(origin_type==1){
@ManyToOne
@JoinColumn(name = "ORIGIN_ID",nullable = false)
private Supplier supplier;
}
else if(origin_type==2){
@ManyToOne
@JoinColumn(name = "ORIGIN_ID",nullable = false)
private Warehouse warehouse;
}
else if(origin_type==3){
@ManyToOne
@JoinColumn(name = "ORIGIN_ID",nullable = false)
private Store store;
}
//same for destinations
}
我不知道这是否可能?而且我不知道要搜索哪些关键字来执行此操作,因为我正在自学。
解决方法
这种情况可以由 Table per class
的 Inheritance Mapping
处理。
Table Per Class 策略将每个实体映射到它的表,该表包含实体的所有属性,包括继承的属性。
您需要将 Supplier
、Warehouse
和 Store
类作为 Shipment
的子类。并为您的 {{1} 使用 @Inhertance
批注} 类如下。
Shipment
Here 就是一个例子。
编辑答案
实际上,您的情况大多符合Joined Table
为此,您需要将继承类型更改为
@Entity
@Table(name = "SHIPMENT")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Shipment implements Serializable
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。