是否可以在包含目标+连接字段的子类上使用@JoinTable?

时间:2018-05-08 10:45:12

标签: java sql spring jpa spring-data

我的模型(示例)如下:

KeyError: '_module'

我的JPA定义:

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)
);

到目前为止,非常好,当你需要的只是团队中的人员名单时。但是现在我需要在我的人域中添加联接表中的@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。这有可能吗?应该以如此聪明的方式指示JPA,它将连接表属性添加到最终目标实体(在读取和保存时)。

1 个答案:

答案 0 :(得分:1)

  • 无需将TeamIndividual扩展为Person。
  • 使用@Table注释TeamIndividual(name =“team_reference_persons”)
  • 在TeamIndividual中定义字段(teamId,personId,uses_telephone)
  • 使用@ManyToOne和@JoinColumn注释字段teamId和PersonId
  • 在没有注释的情况下向团队添加列表 试试这个,它会工作.. !!