2015-12-07 1 views
2

J'ai trois classes ayant la classe hiérarchie commeChargement des propriétés de la base de données dans Hibernate?

  • ParentClass.java

    having commons properties used for both ChildClass1 and ChildClass2. 
    
  • ChildClass1 extends ParentClass

    ayant des propriétés utilisées pour cette ChildClass1 + il utilise aussi quelques-unes des propriétés communes de la classe parente

  • ChildClass2 extends ParentClass

    ayant des propriétés utilisées pour cette ChildClass2 + il utilise aussi quelques-unes des propriétés communes de la classe mère

Cette toutes les propriétés sont disponibles dans le tableau avec deux colonnes

**Key    value**  Type 
--------------------------------------- 
propertyKey1 propertyValue1 Child1 
propertyKey2 propertyValue2 Child1 
propertyKey3 propertyValue3 Child2 
propertyKey4 propertyValue4 Child2 
propertyKey5 propertyValue5 CommonPorperty 
..    ..    .. 
propertyKeyn propertyValuen .. 

Maintenant, je ne suis pas sûr que comment les charger de l'héritage d'hibernation?

Apologie question idiote ...

Merci à l'avance

+0

Parlez-vous de deux types de propriétés? Une propriété d'une entité hibernate est un java-champ ayant un nom spécifique mais il semble que votre nom de propriété soit une valeur dans la table .... s'il vous plaît réécrire. –

+0

Vérification sur descriminator ... – Siva

+0

Possible copie de http://stackoverflow.com/questions/16772370/when-to-use-discriminatorvalue-annotation-in-hibernate –

Répondre

1

Vous devez mettre à informer Hibernate quelle instance doit être chargé une colonne supplémentaire « discriminante » lorsque vous travaillez sur la même table avec plusieurs les types. Voir l'exemple:

@Entity 
@org.hibernate.annotations.Entity(dynamicInsert = true, dynamicUpdate = true) 
@Table(name = "PARENT_TABLE") 
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.INTEGER) 
public abstract class ParentEntity implements java.io.Serializable { 

    private long id; 
    private String commonValue1; 

    @Id  
    @Column(name = "ID", nullable = false) 
    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    @Column(name = "Common_Value1") 
    public String getCommonValue1(){ 
     return commonValue1; 
    } 

    public void setCommonValue1(String commonValue1){ 
     this.commonValue1 = commonValue1; 
    } 
} 


@Entity 
@DiscriminatorValue("1") 
public class ChildEntity1 extends ParentEntity { 

    private String child1Value; 

    @Column(name = "Child1_Value") 
    public String getChild1Value(){ 
     return child1Value; 
    } 

    public void setChild1Value(String child1Value){ 
     this.child1Value = child1Value; 
    } 
} 

@Entity 
@DiscriminatorValue("2") 
public class ChildEntity2 extends ParentEntity { 

    private String child2Value; 

    @Column(name = "Child2_Value") 
    public String getChild2Value(){ 
     return child2Value; 
    } 

    public void setChild2Value(String child2Value){ 
     this.child2Value = child2Value; 
    } 
} 
+0

Merci @ hsnkhrmn..Mais il n'y a pas de colonne nommée ' Child1_Value '. et Child2_Value, alors comment pouvons-nous utiliser cela? Ici mon problème est qu'il n'y a pas de colonne spécifique concernant la classe enfant – water

+0

Les valeurs que j'ai utilisées sont juste par exemple, vous devez le changer en fonction de votre modèle de données. Fondamentalement, vous allez mettre des colonnes communes (et faire la cartographie) sur votre entité Parent, des colonnes spécifiques à une classe est à des tables spécifiques (Child1 ou Child2) – hsnkhrmn

+0

Oui, vous avez raison .... hsnkhrmn .. BUt ici je n'ai pas de spécifique colonne pour chidl1 ou child2. Seul propertykye est spécifique à child1 ou child2. – water