2016-08-31 3 views
1

Je travaille sur JPA avec TopLink et que vous souhaitez créer la classe entité. Je veux utiliser le tableau A de (alias) PK dans le cadre de clé étrangère dans la clé primaire composite Tableau B (message). J'ai créé la structure suivante pour l'entité. Mais je vois la colonne de jointure est null et montrer null dans le tableau.Comment faire une clé primaire composite qui se compose d'un PK d'autre table que FK

@Embeddable 
public class MessageEntityPK implements Serializable { 
    private static final long serialVersionUID = -229800894330529492L; 
    private String messageSubject; 
    private String aliasName; 

    public String getMessageSubject() { 
     return messageSubject; 
    } 

    public String getAliasName() { 
     return aliasName; 
    } 

    public MessageEntityPK() { 

    } 

    public MessageEntityPK(String msgSubject, String aliasName) { 
     this.aliasName = aliasName; 
     this.messageSubject = msgSubject; 
    } 
} 

@Entity 
@Table(name = "ALIAS_ENTITY") 
public class AliasEntity { 
    @Id 
    private String aliasName; 
    private String aliasPath; 

    public String getAliasName() { 
     return aliasName; 
    } 

    public void setAliasName(String aliasName) { 
     this.aliasName = aliasName; 
    } 

    public String getAliasPath() { 
     return aliasPath; 
    } 

    public void setAliasPath(String aliasPath) { 
     this.aliasPath = aliasPath; 
    } 

    //hashCode and equals Function. 

} 


@Entity 
public class MessageEntity { 
    @EmbeddedId 
    private MessageEntityPK messageEntityID; 

    @ManyToOne 
    @MapsId("aliasName") 
    @JoinColumn(name = "Alias_Name", referencedColumnName = "aliasName") 
    private AliasEntity aliasEntity; 

    public MessageEntityPK getMessageEntityID() { 
     return messageEntityID; 
    } 

    public void setMessageEntityID(MessageEntityPK messageEntityID) { 
     this.messageEntityID = messageEntityID; 
    } 

    public AliasEntity getAliasEntity() { 
     return aliasEntity; 
    } 

    public void setAliasEntity(AliasEntity aliasEntity) { 
     this.aliasEntity = aliasEntity; 
    } 

} 

Tableau:

| ALIASNAME  | varchar(255) | NO | PRI | NULL |  | 
| MESSAGESUBJECT | varchar(255) | NO | PRI | NULL |  | 
| Alias_Name  | varchar(255) | YES | MUL | NULL |  | 
+----------------+--------------+------+-----+---------+----‌​---+ 
+0

| ALIASNAME | varchar (255) | NO | PRI | NULL | | | MESSAGESUBJECT | varchar (255) | NO | PRI | NULL | | | Alias_Nom | varchar (255) | OUI | MUL | NULL | | + -------------- + + ---------------- ------ + ----- + --- ------ + ------- + – Abhash

+0

Il y a une autre implémentation de TopLink et EclipseLink. J'ai utilisé l'implémentation JPA eclipselink et mon problème est résolu. – Abhash

Répondre

0

Semble, mis @MapsId d'abord me question de commande d'annotation. Jetez un oeil à la référence http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#d0e4865

+0

Merci pour votre réponse rapide. Je comprends que j'utilise jpa pas hiberner. et en utilisant mapsid j'obtiens une colonne supplémentaire qui est même que le FK et pendant que j'entre la valeur dans le tableau j'obtiens la valeur nulle entrée pour elle. comme vous pouvez le voir, il y a deux colonnes de noms d'alias. J'ai essayé de le mettre en place mais il ne permet pas – Abhash

+0

Mes pensées étaient sur la première exécution colonne de jointure et que mapsId. Désolé qui ne pouvait pas vous aider –