Учитывая представление Spring Boot Java базы данных, содержащей 2 таблицы и таблицу поиска между ними, с отношениями от одного до нескольких между двумя таблицами и таблицей поиска, как можно вернуть две сущности, представляющие основные таблицы в вложенный мод?
На данный момент я могу только понять, как вернуть их рядом, что не является подходящим ответом для того, что требует интерфейс, когда он делает запрос.
Контроллер не учитывается для простоты - он просто возвращает службу 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;
}
}
Edit: JSON в настоящее время выглядит так:
[[{
"age: "123"
},
[{
"foo": "456"
},
{
"foo": "789"
}]
],
[{
"age": "987"
},
[
{
"foo": "654"
},
{
"foo": "321"
},
{
"foo": "123"
}
]
]
]
I хотите, чтобы ответ JSON был таким:
[[
{
"age: "123",
CList:[{
"foo": "456"
},
{
"foo": "789"
}]
},
{
"age: "987",
CList:[{
"foo": "654"
},
{
"foo": "321"
},
{
"foo": "123"
}]
},
]
]