2012-04-28 1 views
0

Supposons que nous ayons la situation suivante: Nous souhaitons hériter de toutes les valeurs des articles de la classe sauf une par exemple. Comment pouvons-nous y parvenir? Je sais que si nous voulons hériter tout des articles juste écrireExclusion de l'attribut ID de l'entité de base dans la sous-entité dans Hibernate

public class Fruits extends Articles{ ... } 

mais comment pouvons-nous parvenir à hériter des attributs spécifiques que des articles de classe, par exemple. chaque attribut sauf un et un attribut laisse intact?

EDIT:

@Entity 
@Table(name = "Article") 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class Article { 
@Id @GeneratedValue(strategy=GenerationType.AUTO) 
@Basic(optional = false) 
@Column(name = "ART_ID") 
private Long id; 

@Basic(optional = false) 
@Column(name = "ART_NAME") 
private String name; 

@Basic(optional = true) 
@Column(name = "ART_COST") 
private String cost; 

// ... 
} 

@Entity 
@Table(name="Fruits") 
@AttributeOverrides({ 
@AttributeOverride(name="name", [email protected](name="ART_NAME")), 
@AttributeOverride(name="cost", [email protected](name="ART_COST")), 
}) 
// This is what is causing the issue. Fruits inherits something which is already  defined in it's scope, and as the result can't declare exactly how to process it. 
public class Fruits extends Article { 

@Id @GeneratedValue(strategy=GenerationType.AUTO) 
@Basic(optional = false) 
@Column(name = "FRU_ID") 
private Long fruitID; 

@Column(name="FRU_FROZEN") 
private String fruFrozen; 

//... 
} 

Donc, je pense que le code ne fonctionnera pas, car cela se traduira par plusieurs ID dans la hiérarchie de l'entité, ainsi est-il une autre façon que je peux résoudre ce problème?

+0

Vous ne pouvez pas REDEFINER l'identité dans une sous-classe. S'il vous plaît lire la spécification JPA – DataNucleus

Répondre

0

Vous pouvez mettre un attribut de classe de base non obligatoire en privé.

1

Vous ne pouvez pas supprimer un membre des articles

Lorsque nom est membre de Articles et Fruits EST A articles, il ne pouvait pas être un moyen de supprimer nom

Vous pouvez cacher certains membres de Articles utilisant la portée privé

Une autre approche consiste à créer une classe "BaseArticles" sans le membre nom.

Puis tirent les articles et les fruits de BaseArticles

public BaseArticles { 
    // HAS NO private String name; 
... 
} 

public Article extends BaseArticles { 
    private String name; 
... 
} 

public Fruits extends BaseArticles { 
    // WITHOUT private String name; 
... 
} 

Cependant, il est simple mais possible de traiter en utilisant OO-veille prolongée héritage. Il y a une annotation mais je ne sais pas des mains

+0

édité le Q. pour être plus approprié à mon cas. –

Questions connexes