2010-02-11 1 views
2

je besoin d'aide avec l'héritage JPAEst-ce que l'annotation @AttributeOverride brise le polymorphisme?

Je vais illustrer mon problème avec un exemple:

Supose nous avons une classe d'animaux et une classe Cat.

@Entity 
@Table(name = "animal") 
@DiscriminatorColumn(name="animal_type",columnDefinition="Integer",length=11) 
public class Animal implements Serializable{ 
    @Id 
    @GeneratedValue (strategy = GenerationType.IDENTITY) 
    @Column(name = "animal_id", nullable = false) 
    private Long id; 

    ... 

} 

@Entity 
@Table(name = "cat") 
@DiscriminatorValue("1") 
@AttributeOverride(name="id",[email protected](name="cat_id")) 
public class Cat extends Animal { 

    ... 

} 

Comme le montre l'exemple, je veux utiliser un nom différent pour ma colonne id dans la table de chat

Mais lorsque je tente d'exécuter une requête polymorphique demandant tous les cas d'animaux, je reçois un Erreur. C'est comme si la requête ne pouvait pas gérer les différents noms de champs selon l'instance animale.

Est-ce que je fais cela correctement? Merci d'avance.

+0

Avez-vous trouvé une solution à ce problème? –

Répondre

0

Non, je suppose que je ne le suis pas.

Tout d'abord j'ai oublié l'annotation @Inheritance:

@Inheritance(strategy=InheritanceType.JOINED) 

Quoi qu'il en soit je vois que je peux remplacer le reste des champs, mais pas l'ID. Ou peut-être le problème est que j'utilise l'id dans la requête, mais pas le reste des champs.

0

Vous devez utiliser les annotations @PrimaryKeyJoinColumn

1

Vous pouvez utiliser cette annotation. Je mets des exemples

@PrimaryKeyJoinColumn(name="cat_id") 
public class Cat extends Animal