账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    spring-data-jpa表实体序列化后触发所有懒加载.
    45
    0

    需求

    我想做到的是 需要的时候触发(.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到前端.(还是没有改变现状)

    希望

    有更好更完美的方式.

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版

    回答动态

    师傅被妖怪抓走了:发布了悬赏问题火爆全网的“元宇宙”到底是什么?预计能赚取 1积分收益
    酒后略带风情:发布了悬赏问题Android内存中Graphics与Code占用过高预计能赚取 10积分收益
    扛起拖把扫天下:发布了悬赏问题typescript如何导出接口配置?求解,谢谢!预计能赚取 10积分收益
    发布了悬赏问题Vue 如何改变返回页面的路径?如让B页面只能返回到A页面.预计能赚取 11积分收益
    发布了悬赏问题vue H5移动端;底部bottom固定定位,安卓弹起键盘导致页面变形如何解决?预计能赚取 10积分收益
    发布了悬赏问题请问为什么tomcat8.5 GET请求中文正常,POST请求还需要设置UTF-8.预计能赚取 10积分收益
    发布了悬赏问题vue2.5+ts创建以及引入jq的方法预计能赚取 11积分收益
    情场浪女:发布了悬赏问题import ggplot时报错module 'pandas' has no attribute 'tslib'预计能赚取 10积分收益
    见心书画许老师18753375161:发布了悬赏问题echarts3 legend禁止点击事件,允许悬浮事件预计能赚取 11积分收益
    aa_92cb0bd09f:发布了悬赏问题codewar上的一个问题预计能赚取 11积分收益