java - 是否可以在包含目标 + 连接字段的子类上使用 @JoinTable?
问题描述
我的模型(示例)如下:
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 应该以如此巧妙的方式指示,它将连接表属性添加到最终目标实体(在读取和保存时)。
解决方案
- 无需将 TeamIndividual 扩展到 Person。
- 使用 @Table(name = "team_reference_persons") 注释 TeamIndividual
- 在 TeamIndividual 中定义字段(teamId、personId、uses_telephone)
- 使用 @ManyToOne 和 @JoinColumn 注释字段 teamId 和 PersonId
- 将列表添加到团队没有注释试试这个,它会工作..!!
推荐阅读
- linux - 权限被拒绝:Docker 中的“/var/lib/pgadmin/sessions”
- java - 字符串索引超出范围错误 - 如何在 java 中垂直打印此字符串?
- firebase - 带有 Firebase 和 Xcode 12 的 SwiftUI 应用程序生命周期
- reactjs - 如何将基于类的单选按钮组更改为基于功能的单选按钮组
- r - 在 R 中导入 excel 文件时出现日期格式问题
- heroku - 为什么上传到 Heroku 的图片一天后就消失了?
- python - 我在 while 循环中使用函数的程序不保留更新的值
- java - 在项目框架中的多个地图上显示图像
- hazelcast - 按时间范围划分的 Hazelcast 地图条目
- pytorch - Optuna Pytorch:目标函数的返回值不能转换为浮点数