我是REST API开发的新手。我正在构建一个API来获取农民的所有收获。农民表有一个主键farmer_id。收获表有一个主键harvest_id和一个指向农民表的外键。我正在使用这个查询来获取收获数据。
public List<Harvest> getFarmerHarvests(Long farmerId) {
String jpql = "SELECT h FROM Harvest h WHERE h.farmer.farmerId = :farmerId";
TypedQuery<Harvest> query = entityManager.createQuery(jpql, Harvest.class);
query.setParameter("farmerId", farmerId);
return query.getResultList();
}
字符串
这就是结果集的样子
[
{
"harvestId": 1,
"cropName": "Barley",
"farmer": {
"username": "don_joe",
"firstname": "Don",
"lastname": "Joe",
"password": "$2a$10$l0ExQAoGIdk.ULksc/W66eXEqWelt3Jo9Il7aPgJM7LE0G9Ok2Dnm",
"email": "[email protected]",
"address": "123 Main Street",
"city": "Seattle",
"phno": "+1 1234567890",
"enabled": true,
"farmerId": 1
},
"harvestDate": "2023-12-23T18:30:00.000+00:00",
"expiryDate": "2023-12-31T18:30:00.000+00:00",
"quantity": 10,
"units": "Kg (Kilograms)",
"pricePerQuantity": 100,
"smallestUnitSize": 1,
"imageUrl": "no url"
},
{
"harvestId": 2,
"cropName": "Wheat",
"farmer": {
"username": "don_joe",
"firstname": "Don",
"lastname": "Joe",
"password": "$2a$10$l0ExQAoGIdk.ULksc/W66eXEqWelt3Jo9Il7aPgJM7LE0G9Ok2Dnm",
"email": "[email protected]",
"address": "123 Main Street",
"city": "Seattle",
"phno": "+1 1234567890",
"enabled": true,
"farmerId": 1
},
"harvestDate": "2023-12-23T18:30:00.000+00:00",
"expiryDate": "2024-02-29T18:30:00.000+00:00",
"quantity": 30,
"units": "Kg (Kilograms)",
"pricePerQuantity": 300,
"smallestUnitSize": 1,
"imageUrl": "no url"
}
]
型
正如您所看到的,农民信息在两个对象中重复。最佳实践是什么?数据在API响应中应该是这样的吗?或者我应该排除此数据?如果是,我如何排除它?
对于我的用例,我不需要每个对象上的Farmer数据。
1条答案
按热度按时间wfauudbj1#
反转JSON响应的设计,以模拟一对多关系,而不是多对一关系。
举例来说:
字符串
考虑下面的SQL查询,它具有一对多的Author to Posts关系,其中当查询作者时,属于他们的所有帖子都在嵌套数组中返回。
型
基本上是农民多岗的结构。