如何解决JPA-实体的属性类型取决于列值
我正在使用具有以下表格的第三方数据库:
Node
----
id (int not null)
fKey (varchar(max) null)
refTable (varchar(max) null)
fkey
是refTable
主键的值。 refTable
包含以下值Car
,Truck
或Boat
中的一个。我的节点实体当前看起来像:
@Entity
@Data
public class Node {
@Id
private Long id;
@Column(name = "fKey")
private String foreignKey;
@Column(name = "refTable")
private String targetTable;
}
但是当targetTable为Car
时,我希望节点实体引用Car
实体。像这样:
@Entity
@Data
public class Node {
@Id
private Long id;
@ManyToOne
@JoinColumn(name = "carId")
private Car car;
// ok with having truck and boat
// here too and being null when refTable refers to Car
}
如何设置此映射?
解决方法
更好的办法是使用继承。您应该将Node类转换为MainClass并从其继承到Car,Truck和Boat
@Entity
@Data
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = “refTable”)
public class Node {
@Id
private Long id;
}
您的子类实现应类似于
@Entity
@Data
@DiscriminatorValue(“Car”)
public class CarNode extends Node {
@ManyToOne
@JoinColumn(name = "fKey")
private Car car;
}
卡车和船只也是如此。您对节点的查询将返回CarNodes,TruckNodes或BoatNodes
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。