2010-11-10 6 views
0

Le titre est un peu bizarre, alors laissez-moi clarifier.Récupérer la collection de sous-classes en fonction de la valeur de la colonne

J'ai deux objets, Garage et Véhicule, dans une relation un-à-plusieurs. Il existe plusieurs types de véhicules, tels que la voiture et le camion; le type est conservé en tant que chaîne dans la table Vehicle.

est ici les deux classes:

@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; 

    .... 
} 

Afin de différencier les types de véhicules, actuellement, nous devons regarder la colonne de type et d'utiliser un ENUM. Ce que j'aimerais faire, c'est avoir des sous-classes de Véhicule, telles que Voiture et Camion, pour représenter les différents types plutôt que de se fier au champ Type. Ensuite, mon code peut instanceof pour déterminer le type au lieu d'utiliser ce champ.

Cependant, je ne sais pas comment dire à Hibernate comment instancier des sous-classes en fonction de la valeur de la colonne Type, ou si c'est possible.

J'apprécierais toute aide que vous pouvez donner. Merci d'avance!

Répondre

1

Si vous souhaitez enregistrer le schéma de base de données en cours, vous devez utiliser la stratégie de SINGLE_TABLE inheritence avec type colonne comme discriminateur:

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