2010-11-10 103 views
0

标题有点奇怪,请让我澄清。基于列值检索子类集合

我有两个对象,车库和车辆,一对多的关系。有多种类型的车辆,例如汽车和卡车;该类型在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; 

    .... 
} 

为了车辆类型区分,目前我们要看看类型列,并使用一个枚举。我想要做的是有Vehicle的子类,例如Car和Truck,来代表不同的类型,而不是依赖于Type字段。然后我的代码可以instanceof来确定类型,而不是使用该字段。

但是,我不知道如何告诉Hibernate如何根据Type列的值来实例化子类,或者甚至可以。

我会很感激任何帮助,你们可以给。提前致谢!

回答

1

如果你想保存当前的数据库架构,则需要使用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 { ... }