我有产品类别和所需产品库存列表 我从数据库获取产品时遇到问题
@Entity
public class Product {
@OneToMany(mappedBy = "product",cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
private List<RequiredStock> requiredStocks;
}
一旦我从产品存储库中调用 findAll 方法,就会立即获取RequiredStock
public List<Product> getAllProducts(){
return productRepository.findAll();
}
这是我从邮递员那里得到的回复
[
{
"id": 26,
"requiredStocks": [
{
"id": 54,
"amount": 5.0,
"stock": {
"id": 1,
"stockName": "Sugar",
"quantity": 500.0,
"stockUnit": "GRAM",
"unitPrice": 25.0
}
}
],
},
{
"id": 28,
"requiredStocks": [
{
"id": 55,
"amount": 2.0,
"stock": {
"id": 1,
"stockName": "Sugar",
"quantity": 500.0,
"stockUnit": "GRAM",
"unitPrice": 25.0
}
}
],
},
...
我不想从API获取RequiredStocks
我认为这里的问题是对 LAZY 关系如何运作的误解。当关系被标记为 LAZY 时,当沿着主对象(在本例中为
Product
)时不会检索它,而是在访问属性时(当您调用 getRequiredStock
时。
所以,我猜您正在将
Product
映射到 dto 或从 API 返回 Products
,这会导致调用 getter 并触发关系查询。
在这种情况下,我建议避免映射
requiredStock
属性,或者使用不带 requiredStock
的自定义 dto 类忽略该属性。
这里有一个关于EAGER和LAZY差异的更详细的SO问题:Java Persistence API中FetchType LAZY和EAGER之间的区别?