Java 基于列值检索子类集合

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")

标题有点奇怪,让我澄清一下

我有两个对象,车库和车辆,处于一对多关系中。有多种类型的车辆,如轿车和卡车;该类型将作为字符串保留在Vehicle表中

以下是两个类:

@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 { ... }