У меня есть это простое отображение:
@Entity
public class Person
{
@ElementCollection
@CollectionTable(name = "PERSON_NOTE", joinColumns = @JoinColumn(name = "PERSON_ID"))
private Set<Note> notes;
}
@Entity
public class Company
{
@ElementCollection
@CollectionTable(name = "COMPANY_NOTE", joinColumns = @JoinColumn(name = "COMPANY_ID"))
private Set<Note> notes;
}
@Embeddable
public class Note
{
@Column
private Date date;
@Column
private String text;
}
Теперь меня попросили сгруппировать заметки в связующие, чтобы:
@Entity
public class Person
{
@???
private Set<Binder> binders;
}
@Entity
public class Company
{
@???
private Set<Binder> binders;
}
@???
public class Binder
{
@Column
private String title;
@???
private Set<Note> notes;
}
Я знаю, что могу создать группу сущностей и сопоставить их с @OneToMany
, но я бы хотел сохранить модель максимально прямой.
Кроме того, я хотел бы иметь эти таблицы:
PERSON (ID, ...)
COMPANY (ID, ...)
PERSON_BINDER (ID, PERSON_ID, TITLE)
COMPANY_BINDER (ID, COMPANY_ID, TITLE)
PERSON_BINDER_NOTE (PERSON_BINDER_ID, DATE, TEXT)
COMPANY_BINDER_NOTE (COMPANY_BINDER_ID, DATE, TEXT)
Наконец, я не хочу создавать
@Entity/@MappedSuperclass @Inheritance(anyType) abstract Binder
@Entity PersonBinder
@Entity CompanyBinder
, поскольку это просто упрощенный пример (в реальном мире гораздо больше «субъектных» сущностей и гораздо больше «связующих» сущностей ...).
Я ищу альтернативное, но элегантное решение (может быть, уловка @ElementCollection
с @ElementCollection
?)
Приветствуются не только решения Java / Hibernate, но и ER-модель / концептуальные альтернативы.