2009-08-03 3 views
0

Ist es möglich, ein @ ManyToMany-Mapping über einen Join mit 3 PK-Spalten zu verwenden?Mapping einer ManyToMany über die Join/Link-Tabelle mit 3 ID-Feldern

Ich bin ziemlich sicher, dass dies nicht möglich ist und die Lösung ist, die Entität mit @OneToMany, die ich in der Vergangenheit getan habe, zu entlarven, aber weil dieses Feld einfach eine PK ist, dachte ich, vielleicht gibt es eine clevere Zuordnung, um mich zu retten diese Arbeit.

Grüße ein hoffnungsvolles - JamesC

-Update in Reaktion auf ChssPly

Hier ein Ausschnitt aus meiner Einheit 'Join' ist.

@SuppressWarnings("serial") 
    @Embeddable 
    public static class Id implements Serializable { 

     @Column(name = StringPool.Column.APPLICATION_ID) 
     private Long applicationId; 

     @Column(name = StringPool.Column.ARTICLECATEGORY_ID) 
     private Long articleCategoryId; 

     @Column(name = StringPool.Column.USER_ID) 
     private Long userId; 

     public Id() {} 

     public Id(Long applicationId, Long articleCategoryId, Long userId) { 
      this.applicationId = applicationId; 
      this.articleCategoryId = articleCategoryId; 
      this.userId = userId; 
     } 

     public boolean equals(Object o) { 
      if (o instanceof Id) { 
       Id that = (Id)o; 
       return this.applicationId.equals(that.applicationId) && 
         this.articleCategoryId.equals(that.articleCategoryId) && 
         this.userId.equals(that.userId); 
      } else { 
       return false; 
      } 
     } 

     public int hashCode() { 
      return applicationId.hashCode() + articleCategoryId.hashCode() + userId.hashCode(); 
     } 
    } 

Antwort

3

Das hängt davon ab, was Sie mit "3 PK-Spalten" meinen. Hat eine der verknüpften Entitäten einen zusammengesetzten Schlüssel? Sie können sicherlich mehrere Join-Spalten angeben:

@Entity 
public class MyEntity { 
@ManyToMany(targetEntity=MyOtherEntity.class) 
@JoinTable(name="MY_JOIN_TABLE", 
    [email protected](name="ENTITY_ID"), 
    inverseJoinColumns={@JoinColumn(name="OTHER_ID1"), @JoinColumn(name="OTHER_ID2")}) 
    public Collection getOthers() { 
     return employees; 
    } 
} 

Wenn das nicht das ist, was Sie meinten, erklären Sie bitte Ihre Frage.

+0

würde im Grunde die gleiche Sache vorschlagen –

+0

Danke, das ist genau das, was ich wollte. Schade, dass ich dies jetzt in ein OneToMany-Setup umgewandelt habe, aber ich werde es für das nächste Mal wissen. Danke. – JamesC

Verwandte Themen