在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  網(wǎng)絡(luò)安全/ spring-data-jpa表實體序列化后觸發(fā)所有懶加載.

spring-data-jpa表實體序列化后觸發(fā)所有懶加載.

需求

我想做到的是 需要的時候觸發(fā)(.size)懶加載加載關(guān)聯(lián)表的所有數(shù)據(jù),不需要的時候不加載關(guān)聯(lián)表的數(shù)據(jù),隨心所欲.

問題

我的表實體有很多一對多、一對一的關(guān)聯(lián)關(guān)系

user 是一端(mappedBy指定的維護(hù)端)
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格式數(shù)據(jù)給前端.

沒想到天殺的jackson序列化對象成json的時候會觸發(fā)全部懶加載.

對于jsckson只能加上@JsonIgnore并且重寫equals和hashCode來忽略掉.

結(jié)果不能隨心所欲了...

這就和我的初衷不相符了.

期待大大們的解答.

目前操作

所有關(guān)聯(lián)表的屬性都通過@JsonIgnore注解掉,避免被序列化
通過 user.getOrders().size觸發(fā)懶加載, getOrders() 獲取用戶所有訂單.然后把user和orders集合都放到一個map中傳給前端(好麻煩,而且json格式和名稱什么的都全部改一遍)
期望:

{
    name: xxx,
    age: xxx,
    orders: [
        id: xxxx,
        date: xxx
    ]
}

現(xiàn)實:

# 不能把orders放到user中,會被jackson忽略掉的.因為user的orders屬性被我@JsonIgnore了
{
    user: {
        name: xxx,
        age: xxx,
    }
    orders: [
        id: xxxx,
        date: xxx
    ]
}

想到的方案

添加一個轉(zhuǎn)換類把實體轉(zhuǎn)換成map,list再由jackson轉(zhuǎn)json返回到前端(兼容問題和業(yè)務(wù)問題一堆一堆的)
spring data rest的控制層能返回不觸發(fā)懶加載的json到前端.(還是沒有改變現(xiàn)狀)

希望

有更好更完美的方式.

回答
編輯回答
情已空

有知道的嗎?

2018年3月1日 10:33