無(wú)Mi小程序音樂項(xiàng)目開發(fā)實(shí)戰(zhàn)coderwhy梵蒂岡
Spring JPA 1屢次查詢存在死循環(huán)問題
無(wú)Mi小程序音樂項(xiàng)目開發(fā)實(shí)戰(zhàn)coderwhy梵蒂岡
download:https://www.zxit666.com/4314/
的一切配置都是正確的,除了沒有方法獲取數(shù)據(jù),有一個(gè)無(wú)限循環(huán)。
問題和處理計(jì)劃由于運(yùn)用了lombak的@Data
由于我們運(yùn)用了@Data讓lombok定義一切@ToString默許狀況下,它將指向類名,并且它將與每個(gè)字段相關(guān)聯(lián)。
比方用lazy @OneToMany辦法調(diào)用hashCode()時(shí),fetch可能會(huì)有一切的實(shí)體類,這可能會(huì)對(duì)應(yīng)用的運(yùn)轉(zhuǎn)形成十分大的性能問題。
同時(shí),假如在事務(wù)外運(yùn)用,可能會(huì)得到LazyInitializationException。
假如您查詢一個(gè)用戶實(shí)體并打印它,打印將調(diào)用toString()辦法,并且在toString()辦法中有相關(guān)的Dept對(duì)象。所以用戶和子對(duì)象之間的兩個(gè)對(duì)象相互調(diào)用并打印,構(gòu)成遞歸調(diào)用,最后堆棧溢出。
基于以上思索,我們以為@EqualsAndHashCode和@Data不應(yīng)該應(yīng)用于JPA的實(shí)體類。
@ToString還是能夠用的,由于我們能夠用@ToString。Exclude設(shè)置不需求的字段,或者@ tostring(onlyExplicitlyIncluded = true)移除類。
關(guān)于非惰性字段,我們能夠運(yùn)用@ToString。
包括注釋。例如,我們的處理計(jì)劃是只在JPA實(shí)體類中運(yùn)用。
@Getter@Setter注釋。基于以上緣由,這也是很多人倡議運(yùn)用Lombok的緣由。
我們的了解還是能夠用的,不要濫用,不要試圖保管一個(gè)@Data end。