Можно ли использовать @JoinTable над подклассом, который включает в себя поля target + join? - PullRequest
0 голосов
/ 08 мая 2018

Моя модель (в качестве примера) выглядит следующим образом:

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 должен быть указан таким умным способом, что он добавляет свойство таблицы соединений к конечной целевой сущности (как для чтения, так и для сохранения).

1 Ответ

0 голосов
/ 08 мая 2018
  • Нет необходимости расширять TeamIndividual до Person.
  • Аннотировать TeamIndividual с @Table (name = "team_reference_persons")
  • Определение полей (teamId, personId, used_telephone) внутри TeamIndividual
  • Аннотируйте поля teamId и PersonId с помощью @ManyToOne и @ JoinColumn
  • Добавить список в команду без аннотации Попробуйте это, это будет работать .. !!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...