私は次のコードを書きました:
@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;
}
...
}
User は Person であり、User は、連絡先として保持したい「人」(Person-s) のセットを持つことができます。したがって、ここにあるのは、継承 (User が Person を派生させる) と集約関係 (User が Person を含む) の両方です。
データベース テーブルに関しては、次の 3 つのテーブルが必要です。
- 人
- ユーザー
- コンタクト
contact テーブルには、user テーブルと person テーブルの両方への外部キーが含まれています。実際には、次の 2 つのテーブル (個人とユーザー) しかありません 。
私の注釈のいくつかが間違っていると思います...何が間違っていますか?