Hibernate: избегайте переполненности объектов - PullRequest
0 голосов
/ 19 марта 2019

У меня есть это простое отображение:

@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-модель / концептуальные альтернативы.

...