Моя модель (на примере) следующая:
CREATE TABLE person (
id INT PRIMARY KEY,
name TEXT
...
);
CREATE TABLE team (
id INT PRIMARY KEY,
name TEXT
....
);
CREATE TABLE team_reference_persons (
team_id INT NOT NULL,
person_id INT NOT NULL,
uses_telephone BOOLEAN,
PRIMARY KEY (team_id, person_id),
FOREIGN KEY (team_id) REFERENCES team(id),
FOREIGN KEY (person_id) REFERENCES person(id)
);
И мое определение JPA:
@Entity
@Table(name = "team")
public class Team {
@Id
private Integer id;
@OneToMany
@JoinTable(name = "team_reference_persons", joinColumns = @JoinColumn(name = "team_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "person_id", referencedColumnName = "id"))
private List<Person> teamReferencePersons;
...
}
@Entity
@Table(name = "person")
public class Person {
@Id
private UUID id;
private String name;
...
}
Пока все хорошо, когда все, что вам нужно, это список людей в команде. Но теперь мне нужно добавить свойство team_reference_persons.uses_telephone из таблицы соединений в моем личном домене, поэтому я ищу способ сохранить логику людей, пока я создаю новый подкласс.
private class TeamIndividual extends Person {
boolean uses_telephone;
}
Затем замените List<Person> на объект Team на List<TeamIndividual>. Это вообще возможно? JPA следует указывать таким умным образом, чтобы он добавлял свойство таблицы соединений к конечной целевой сущности (как при чтении, так и при сохранении).




Используйте составной первичный ключ с использованием идентификатора команды и идентификатора человека
Спасибо!. Но у меня проблема. Если я конвертирую объединенную таблицу в сущность, мне понадобится первичный ключ для моей сущности Spring Data. Нет ли еще одного хитрого способа с соединительной таблицей прозрачным способом? Или мне следует составить первичный ключ?