下面是我的数据库,其中“table_relation”具有其他3个表“人,地址,工资”的外键
这是我的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
我为所有房产写过getter和setter。
我能够使用以下格式的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"
}
]
}
这可以通过在提供者和地址实体中使用映射来实现吗?请指导我实现这一目标。这是我原始问题的复制,但不是问题本身。
任何帮助是极大的赞赏。
提前致谢。
首先,您的数据库设计不是正常形式。您现在正在为每个人的地址重复一个人的工资。你应该拥有两个连接表,一个在人和工资之间,一个在人和地址之间。或者甚至更好,因为没有任何关系是很多,使用连接列。
其次,使用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)