Spring Boot如何通过查找表将两个实体嵌套在一起而返回另一个实体?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot如何通过查找表将两个实体嵌套在一起而返回另一个实体?相关的知识,希望对你有一定的参考价值。
给出了一个包含两个表和一个查询表的数据库的Spring Boot Java表示,两个表之间以及一个查询表之间具有一对多关系,如何以嵌套方式返回代表主表的两个实体?
目前,我只能弄清楚如何并排返回它们,这对于前端发出请求时所需要的内容不是一个合适的响应。
为简便起见,省略了控制器-它仅返回服务getAWithCNestedInIt()。
@Entity
class A
@Id
@GenereatedValue(strategy = "GenerationType.IDENTITY")
@Column("a_id")
Integer A_Id;
Integer age;
// Relationship with lookup table:
@JsonIgnore
@ToString.Exclude
@OneToMany(mappedBy = "BLinkToA")
private Set <B> ASetLinkToB;
@Entity
// look-up table
class B
@EmbeddedId
BKey id;
// Foreign keys to A and C
@ManyToOne
@MapsId("fk_A_Id")
@JoinColumn("fk_A_Id")
private A BLinkToA;
@ManyToOne
@MapsId("fk_C_Id")
@JoinColumn("fk_C_Id")
private C BLinkToC;
// B Key class here taken out to make code shorter.
@Entity
class C
@Id
@GenereatedValue(strategy = "GenerationType.IDENTITY")
@Column("c_id")
Integer C_Id;
Integer foo;
// Relationship with lookup table:
@JsonIgnore
@ToString.Exclude
@OneToMany(mappedBy = "BLinkToC")
private Set <B> CSetLinkToB;
// A Controller calls and returns the following service method when URI "/getAandC" is hit
@Service
class TheServiceClass
public List<List<Object>> getAWithCNestedInIt()
List <A> aList = new ArrayList<A>();
List<List <C>> cList = new ArrayList<C>();
List<List<Object>> combinedList = new ArrayList <>();
// Assume this method does work to get the desired aList and cList here
///////// /////////
int i = 0;
for (A a: aList)
List<Object> instanceOfBoth = new ArrayList<>();
instanceOfBoth.add(a);
instanceOfBoth.add(cList.get(i));
combinedList.add(instanceOfBoth);
i++;
return combinedList;
编辑:JSON当前看起来像这样:
[[
"age: "123"
,
[
"foo": "456"
,
"foo": "789"
]
],
[
"age": "987"
,
[
"foo": "654"
,
"foo": "321"
,
"foo": "123"
]
]
]
我希望JSON响应是这样:
[[
"age: "123",
CList:[
"foo": "456"
,
"foo": "789"
]
,
"age: "987",
CList:[
"foo": "654"
,
"foo": "321"
,
"foo": "123"
]
,
]
]
答案
您是否有理由不简单地创建响应外观的表示形式并使用您的实体填充该表示形式?public class ATransferObject
private Integer age;
private List<CTransferObject> CList;
// Methods omitted
public class CTransferObject
private Integer foo;
// Methods omitted
这使您的实体与JSON表示分离,而是让您完全按照所需的方式控制表示,而不是在实体中混合JPA和序列化。
以上是关于Spring Boot如何通过查找表将两个实体嵌套在一起而返回另一个实体?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring Boot 为嵌套实体配置 Jackson 反序列化器
Spring Boot-------JPA——EntityManager构建通用DAO