Hibernate + Spring Boot: есть ли способ использовать объединяемую таблицу как сущность? - PullRequest
0 голосов
/ 06 ноября 2019

Допустим, у меня есть таблицы PERSON и COMPANY, связанные таблицей PERSON_COMPANY, в которой помимо внешних ключей я также храню информацию об update_date, create_date и статусе соединения:

DB simple diagram image

Вот как я понял соединение в классе Person, которое работает хорошо:

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "person_contact",
    joinColumns = @JoinColumn(name = "person_id"),
    inverseJoinColumns = @JoinColumn(name = "company_id"))
    private List<Company> companyList;

Проблема возникает, когда я пытаюсь создать сущность для таблицы PERSON_COMPANY, так как есть информация, которая мне понадобитсяв некоторых случаях:

@Entity
@Table(name="person_company")
public class PersonCompany {
   ...
}

Я получаю исключение SchemaManagementException: идентификатор экспорта [person_company] встречался более одного раза.

Есть ли способ использовать таблицу соединения кака также сущность?

Я использую Springboot и Hibernate с mariaDB.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Попробуйте изменить отношения. вместо отношения «многие ко многим» у вас будут два отношения «один ко многим».

Лицо сущности

@OneToMany(fetch = FetchType.LAZY, (mappedBy = "person")
    private List<PersonCompany> personCompanyList;

Лицо компании

@OneToMany(fetch = FetchType.LAZY, (mappedBy = "company")
    private List<PersonCompany> personCompanyList;

Лицо компании

@Entity
@Table(name="person_company")
public class PersonCompany {
   ...

@ManyToOne
@JoinColumn(name = "person_id")
Person person

@ManyToOne
@JoinColumn(name = "company_id")
Company company
}
0 голосов
/ 06 ноября 2019

нравится

@ManyToMany
@JoinTable(name = "person_contact", 
joinColumns = @JoinColumn(name = "person_id"), 
inverseJoinColumns = @JoinColumn(name = "company_id"))
private List<PersonCompany> companyList;
...