Я написал следующий код:
@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;
}
...
}
Пользователь - это Персона, и у Пользователя может быть набор "людей" (Персон), которые он хочет сохранить в качестве контактов. Итак, здесь у меня есть как наследование (пользователь получает лицо), так и отношение агрегации (пользователь содержит лица).
С точки зрения таблиц базы данных я бы ожидал 3 таблицы:
- человек
- Пользователь
- контакт
Где таблица контактов содержит внешние ключи для таблиц пользователя и персоны.
На самом деле у меня есть только следующие две таблицы (человек и пользователь):
альтернативный текст http://picasaweb.google.com/yaneeve.shekel/ProgrammingRelated#5338298839877393922
Я полагаю, что некоторые из моих аннотаций неверны ... Что я сделал не так?