第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

休眠中的自引用實(shí)體導(dǎo)致 StackOverflowErrors

休眠中的自引用實(shí)體導(dǎo)致 StackOverflowErrors

牛魔王的故事 2021-07-17 18:05:57
在我的一個(gè) Java 實(shí)體 (MyState) 中,我有一個(gè)對自身的引用。注釋如下所示:@OneToOne @JoinColumn(name = "previousStateId", nullable = true,         foreignKey = @ForeignKey(name = "fk_state_previousstate"))private MyState previousState;這曾經(jīng)工作得很好,直到表格變大并且越來越多的狀態(tài)相互指向。現(xiàn)在,當(dāng)我嘗試獲取最新的 MyState 時(shí),會發(fā)生 StackOverflowError,因?yàn)榍短滋?。有什么比這里更好的網(wǎng)站來問我的問題?;-)我最終需要訪問根狀態(tài)(一長串狀態(tài)中的第一個(gè)狀態(tài)),以及前一個(gè)狀態(tài)。有什么辦法可以避免獲得所有參考資料?我試圖添加一個(gè)指向原始狀態(tài)的新字段“rootState”。這當(dāng)然是 2 個(gè)狀態(tài)的短鏈,所以效果很好。但是,我確實(shí)也需要以前的狀態(tài)。我應(yīng)該嘗試通過將 previousState 的 previousState 設(shè)置為 null 來手動(dòng)中斷鏈,還是有更好的選擇?
查看完整描述

2 回答

?
天涯盡頭無女友

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊

顯然這是一個(gè)錯(cuò)誤。如果您有一個(gè)實(shí)體 Person 并且該實(shí)體具有對另一個(gè) Person 的嵌套引用,則意味著嵌套的 Person 具有另一個(gè)嵌套鏈接,因此它會執(zhí)行子嵌套鏈接,依此類推。您不必使用 Person 對象引用嵌套的 Person。改用唯一的 id。


public class Person{

    private int idNestedPerson;

    //fields + getters/setters

}

現(xiàn)在您有 2 個(gè)選擇:使用外鍵或保持原樣。如果您選擇第一個(gè)選項(xiàng),您必須映射該nestedId,但我建議您開始使用第二個(gè)選項(xiàng)。這樣你就有一個(gè)帶有引用“父親”人的 id 的人。如果該 nestedId 為 != null OR > 0(根據(jù)您分配給 id 的類型),則表示 Person 是嵌套的,如果未填充 id 或 id 的默認(rèn) int 值為 0,則表示 Person是一個(gè)“根”,所以不是嵌套的。有關(guān)詳細(xì)信息,請參閱“分層數(shù)據(jù)”。


查看完整回答
反對 回復(fù) 2021-07-22
?
www說

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊

這應(yīng)該有效,直到您有循環(huán)依賴。對于循環(huán)依賴,StackOverflowError 可能會因?yàn)闊o限循環(huán)遞歸獲取先前狀態(tài)而發(fā)生。

例如,當(dāng)你有兩個(gè)實(shí)體 A 和 B。A 指向 B 而 B 指向 A 那么你有無限循環(huán),并且使用 EAGER 獲取策略你最終會得到 StackOverflowError。

您需要檢查您在 DB 中是否沒有任何循環(huán)依賴。


查看完整回答
反對 回復(fù) 2021-07-22
  • 2 回答
  • 0 關(guān)注
  • 191 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號