2011-02-23 4 views
2

J'ai des problèmes pour remplacer une association. La lecture javadoc http://download.oracle.com/javaee/6/api/javax/persistence/CollectionTable.html vous pouvez lire « Voir aussi: ElementCollection, AttributeOverride, AssociationOverride, Colonne » Wich nous donne supposons que vous pouvez l'utiliser .. mais je ne sais pas comment cela ne fonctionne pasProblèmes avec ElementCollection/MappedSuperclass/AssociationOverride

@MappedSuperclass 
public class AbstractUser { 
[...] 
public String getLastname() { ...} 
    @ElementCollection 
    @CollectionTable([email protected](name="user_id")) 
    @Column(name="nickname") 
    public Set<String> getNicknames() { ... } 

outils

@Entity 
@Table(name="users") 
@Table(name="user_rfcs") 
@AssociationOverride(name = "nicknames", 
     joinTable = @JoinTable(name = "user_nicknames", joinColumns = @JoinColumn(name = "user_id")) 
) 
public class User extends AbstractUser { 
[...] 
} 



@Entity 
@Table(name="user_rfcs") 
@AssociationOverride(name = "nicknames", 
     joinTable = @JoinTable(name = "user_rfc_nicknames", joinColumns = @JoinColumn(name = "user_id")) 
) 
public class UserRFC extends AbstractUser { 
     [...] 
} 

Répondre

1

@AssociationOverride est mentionné dans la section "Voir aussi" en raison de ce qui suit:

Si la classe intégrable contient des références à autres entités, les valeurs par défaut des colonnes correspondant à ces références peuvent être remplacées au moyen des annotations AssociationOverride et/ou AssociationOverrides.

De l'autre côté, javadoc de @AssociationOverride dit qu'il ne peut être appliqué uniquement aux relations d'entités, non collections de primitives:

Utilisé pour remplacer un mappage pour une relation d'entité

Donc, il semble que vous ne pouvez pas le faire avec @AssociationOverride, et vous devez remplacer la méthode getNicknames() avec différentes annotations dans les sous-classes.

+0

est possible de résoudre le problème de la conversion de la primitive en tant qu'objet incorporé? – fphilip

+0

@fphilip: Non, '@AssociationOverride' ne s'applique pas à' @ CollectionTable'. – axtavt