Hibernate Spring JPA存储库条件重载列实现
我在这里有一部分数据库,简化了问题:Hibernate Spring JPA存储库条件重载列实现,hibernate,jpa,hibernate-mapping,Hibernate,Jpa,Hibernate Mapping,我在这里有一部分数据库,简化了问题: 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
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个表来实现这一点,每个表存储一种类型的装运,但我意识到我可以通过创建一个名为装运的表来抽象这一点,因为所有可能的来源和目的地都具有相同的ID长度和类型(int)。我使用shipping.type来标识原产地是供应商、仓库还是商店,反之亦然,使用dest_类型。我的问题是如何在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
}
我不知道这是否可能?我不知道要搜索什么关键字来实现这一点,因为我在自学。这种情况可以通过
继承映射的表/class
来处理
“每类表”策略将每个实体映射到其表,该表包含实体的所有属性,包括继承的属性
您需要将供应商
、仓库
和存储
类作为装运
的子类,并对装运
类使用@inherance
注释,如下所示
@Entity
@Table(name = "SHIPMENT")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Shipment implements Serializable
这就是一个例子
编辑的Anwer
事实上,你的案子基本上符合
为此,您需要将继承类型更改为
@heritance(strategy=heritancetype.JOINED)