2016-08-31 9 views
1
besteht

Ich arbeite an JPA mit toplink und möchte Entity-Klasse erstellen. Ich möchte die PK von Tabelle A (Alias) als Teil des Fremdschlüssels im zusammengesetzten Primärschlüssel (Nachricht) von Tabelle B verwenden. Ich habe folgende Struktur für die Entität erstellt. Aber ich sehe die Join-Spalte ist null und zeigen null in der Tabelle.Wie erstellt man einen zusammengesetzten Primärschlüssel, der aus einem PK einer anderen Tabelle als 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; 
    } 

} 

Tabelle:

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

| ALIASNAME | varchar (255) | NEIN | PRI | NULL | | | MESSAGESUBJECT | varchar (255) | NEIN | PRI | NULL | | | Alias_Name | varchar (255) | JA | MUL | NULL | | + ---------------- + -------------- + ------ + ----- + --- ------ + ------- + – Abhash

+0

Es gibt eine andere Implementierung von toplink und eclipselink. Ich habe Eclipselink JPA-Implementierung verwendet und mein Problem wird gelöst. – Abhash

Antwort

0

mir scheint Angelegenheit Anmerkung Bestellung, setzen @MapsId zuerst. Werfen Sie einen Blick auf die Referenz http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#d0e4865

+0

Danke für Ihre schnelle Antwort. Ich verstehe, dass ich jpa nicht Winterschlaf benutze. und wenn ich mapsid benutze, bekomme ich eine zusätzliche Spalte, die mit der FK identisch ist, und während ich den Wert in die Tabelle eingabe, bekomme ich einen Nullwert dafür. Wie Sie sehen können, gibt es zwei Aliasnamenspalten. Ich habe versucht, es aufzustellen, aber immer noch hilft es nicht – Abhash

+0

Meine Gedanken waren über diese erste Join-Spalte durchführen und als mapsId. Entschuldigung, das konnte dir nicht helfen –

Verwandte Themen