gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:16:34 25 4
gpt4 key购买 nike

我的模型(示例)如下:

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来 self 的 person 域中的联接表的属性,因此我正在寻找一种方法来保留 person 逻辑,同时创建一个新的子类。

private class TeamIndividual extends Person {
boolean uses_telephone;
}

然后改变List<Person>Team实体 List<TeamIndividual> 。这可能吗? JPA 应该以如此智能的方式指示,它将连接表属性添加到最终目标实体(在读取和保存时)。

最佳答案

  • 无需将 TeamIndividual 扩展到 Person。
  • 使用 @Table(name = "team_reference_persons") 注解 TeamIndividual
  • 在 TeamIndividual 中定义字段(teamId、personId、uses_telephone)
  • 使用 @ManyToOne 和 @JoinColumn 注释字段 teamId 和 PersonId
  • 将列表添加到团队而不添加注释试试这个,它会起作用的..!!

关于java - 是否可以在包含目标+连接字段的子类上使用@JoinTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50231729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com