需求
我想做到的是 需要的时候触发(.size)懒加载加载关联表的所有数据,不需要的时候不加载关联表的数据,随心所欲.
问题
我的表实体有很多一对多、一对一的关联关系
user 是一端(mappedBy指定的维护端)
order 是多端
// in the user
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
@JsonIgnore
private Set<Order> orders;
// in the order
@ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore
private User user;
我都给他们加上了LAZY
我在控制层用@RestController(通过jackson)返回json格式数据给前端.
没想到天杀的jackson序列化对象成json的时候会触发全部懒加载.
对于jsckson只能加上@JsonIgnore并且重写equals和hashCode来忽略掉.
结果不能随心所欲了...
这就和我的初衷不相符了.
期待大大们的解答.
目前操作
所有关联表的属性都通过@JsonIgnore注解掉,避免被序列化
通过 user.getOrders().size触发懒加载, getOrders() 获取用户所有订单.然后把user和orders集合都放到一个map中传给前端(好麻烦,而且json格式和名称什么的都全部改一遍)
期望:
{
name: xxx,
age: xxx,
orders: [
id: xxxx,
date: xxx
]
}
现实:
# 不能把orders放到user中,会被jackson忽略掉的.因为user的orders属性被我@JsonIgnore了
{
user: {
name: xxx,
age: xxx,
}
orders: [
id: xxxx,
date: xxx
]
}
想到的方案
添加一个转换类把实体转换成map,list再由jackson转json返回到前端(兼容问题和业务问题一堆一堆的)
spring data rest的控制层能返回不触发懒加载的json到前端.(还是没有改变现状)
希望
有更好更完美的方式.
有知道的吗?