Java 基于列值检索子类集合
标题有点奇怪,让我澄清一下 我有两个对象,车库和车辆,处于一对多关系中。有多种类型的车辆,如轿车和卡车;该类型将作为字符串保留在Vehicle表中 以下是两个类:Java 基于列值检索子类集合,java,hibernate,subclass,superclass,hibernate-annotations,Java,Hibernate,Subclass,Superclass,Hibernate Annotations,标题有点奇怪,让我澄清一下 我有两个对象,车库和车辆,处于一对多关系中。有多种类型的车辆,如轿车和卡车;该类型将作为字符串保留在Vehicle表中 以下是两个类: @Entity @Table(...) public class Garage { .... @Column(name = "garageId") private Integer garageId; @OneToMany @JoinColumn(name = "garageId")
@Entity
@Table(...)
public class Garage {
....
@Column(name = "garageId")
private Integer garageId;
@OneToMany
@JoinColumn(name = "garageId")
private Set<Vehicle> vehicles;
....
}
@Entity
@Table(...)
public class Vehicle {
....
@Column(name = "garageId")
private Integer garageId;
//could be "Truck" or "Car"
@Column(name = "type")
private String type;
....
}
@实体
@表(…)
公共级车库{
....
@列(name=“garageId”)
私有整数garageId;
@独身癖
@JoinColumn(name=“garageId”)
私家车;
....
}
@实体
@表(…)
公车{
....
@列(name=“garageId”)
私有整数garageId;
//可能是“卡车”或“汽车”
@列(name=“type”)
私有字符串类型;
....
}
为了区分不同类型的车辆,目前我们必须查看类型列并使用枚举。我想做的是让车辆的子类,比如Car和Truck,来表示不同的类型,而不是依赖于Type字段。然后我的代码可以instanceof
来确定类型,而不是使用该字段
但是,我不知道如何告诉Hibernate如何基于Type列的值实例化子类,或者它是否可以
我很感激你们能给我的任何帮助。提前谢谢 如果要保存当前数据库架构,需要使用
SINGLE_TABLE
继承策略和type
列作为鉴别器:
@Entity
@Table(...)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Vehicle { ... }
@Entity
@DiscriminatorValue("...")
public class Car extends Vehicle { ... }
@Entity
@DiscriminatorValue("...")
public class Truck extends Vehicle { ... }