2009-05-21 19 views
0

私は次のコードで書かれているJPA継承とOneToMany関係

@Entity 
@Table(name="person") 
@Inheritance(strategy=InheritanceType.JOINED) 
public class Person { 

    private Long id; 

    protected String email; 
    private String firstName; 
    private String lastName; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public Long getId() { 
     return id; 
    } 

... 

} 


@Entity 
@Table(name="users") 
@ForeignKey(name="userPersonId") 
public class User extends Person { 

    private String userName; 
    private String password; 
    private Date registrationDate; 
    private Set<? extends Person> contacts; 

    @OneToMany(targetEntity = com.blah.Person.class ,fetch = FetchType.LAZY, cascade=CascadeType.ALL) 
    @ForeignKey(name="contactId") 
    @JoinColumn(name="contactId") 
    public Set<? extends Person> getContacts() { 
     return contacts; 
    } 

... 

} 

ユーザーが人であると、ユーザーはそれをとして維持したいという「人」(パーソン-S)のセットを持つことができますが連絡先。だから私がここに持つのは、継承(UserがPersonを派生)と集約関係(UserはPersonを含む)の両方です。

私は3つのテーブル期待するデータベーステーブルの面では

:接触テーブルは、ユーザと人の両方のテーブルに外部キーが含まれてい

  1. ユーザー
  2. 接触

を。 は、実際に私は以下の2つの表(人物やユーザー)があります。私は私の注釈の一部が誤っていることを推測 alt text http://picasaweb.google.com/yaneeve.shekel/ProgrammingRelated#5338298839877393922

を...私が間違って何をしましたか?

答えて

1

上記の質問を書いているうちに、ユーザーは多くのユーザーの連絡先となる可能性があり、ユーザーは多くの連絡先を持つことができるため、私の関係は多岐にわたることがわかりました。ここで

はそれをすべてを修正するためのコードです:

@Entity 
@Table(name="users") 
@ForeignKey(name="userPersonId") 
public class User extends Person { 

    private String userName; 
    private String password; 
    private Date registrationDate; 
    private Set<? extends Person> contacts; 

    @ManyToMany(targetEntity = com.blah.Person.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @ForeignKey(name = "contactUserId", inverseName = "contactPersonId") 
    @JoinTable(name = "contact", joinColumns = {@JoinColumn(name = "userId")}, inverseJoinColumns = {@JoinColumn(name = "personId")}) 
    public Set<? extends Person> getContacts() { 
     return contacts; 
    } 

... 

} 

私は今、私が予想の3つのテーブルを取得: alt text http://picasaweb.google.com/yaneeve.shekel/ProgrammingRelated#5338298840732620802

  1. ユーザー
  2. 接触
関連する問題