下面是我的数据库,其中“ table_relation”具有其他3个表的外键“ person,address,salary”
这是我的3个主表的实体
以下是“ table_relation”的实体
@Table(name="table_relation")
@Entity
public class TableRelationEntity {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@JoinColumn(name="person_id", referencedColumnName="person_id")
@ManyToOne
private PersonEntity person;
@JoinColumn(name="address_id", referencedColumnName="address_id")
@ManyToOne
private AddressEntity address;
@JoinColumn(name="salary_id", referencedColumnName="salary_id")
@ManyToOne
private SalaryEntity salary;
//getters and setters
我已经为所有属性编写了吸气剂和吸气剂。
我可以使用以下格式的spring数据JPA从“ table_relation”实体中获取数据
{
id: 1,
person: {
id: 4,
name: "name 1"
},
address: {
id: 1,
city: "city 1"
},
salary: {
id: 1,
amount: "100000"
}
}
当我以以下格式用“ Salary.amount”搜索时,我想获得带有“地址”列表的“人”。
{
id: 4,
name: "name 1",
address: [
{
id: 1,
city: "city 1"
},
{
id: 2,
city: "city 2"
}
]
}
这可以通过在提供者和地址实体中使用映射来实现吗?请指导我实现这一目标。这是我原来问题的复制,而不是问题本身的复制。
非常感谢您的帮助。
谢谢。
答案 0 :(得分:0)
首先,您的数据库设计不是正常形式。您现在要为每个人员地址重复人员工资。您应该有两个联接表,一个在人与薪之间,一个在人与地址之间。甚至更好,因为没有很多关系,所以请使用联接列。
第二,使用JPA时,必须基于对象而不是数据库表进行建模。一个人有薪水,一个人与其薪水之间的关系不是具体的“事物”。
您的人实体应该看起来像这样:
@Entity
public class Person {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "person_id")
private List<Address> adresses = new ArrayList<>();
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "salary_id")
private Salary salary;
//setters, getters, etc
}
地址和薪水的实体无需更改。
对于表格,您应该具有:
Person(id, name, salary_id)
Address(id, city, person_id)
Salary(id, amount)