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

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

成為房地產(chǎn)所有者的意義是什么?CASCADE 是如何與 JPA 中的雙方合作的?

成為房地產(chǎn)所有者的意義是什么?CASCADE 是如何與 JPA 中的雙方合作的?

catspeake 2021-08-19 21:39:53
我有兩張桌子。交易和錯(cuò)誤。事務(wù)和錯(cuò)誤之間存在一對(duì)多關(guān)系。這是一個(gè)雙向關(guān)系,Errors 是擁有方,因?yàn)?@JoinColumn 在 Errors 類中指定。我想了解“擁有”這種關(guān)系究竟意味著什么。說此刻我有,PROCESSED(交易中的列)設(shè)置為 NACTIVE(錯(cuò)誤中的列)設(shè)置為 1場(chǎng)景 1: 現(xiàn)在假設(shè)我們執(zhí)行以下代碼。transactions.setProcessed("Y");errors.setActive(0);transactions.setErrors(errors);entityManager.merge(transactions);我知道 PROCESSED 字段將在 TRANSACTIONS 中設(shè)置為“Y”,但鑒于事務(wù)不是關(guān)系的擁有方,ERRORS 中的 ACTIVE 字段是否也會(huì)設(shè)置為 0 或不設(shè)置?場(chǎng)景 2: 另一方面,如果我們執(zhí)行以下操作:errors.setActive(0);transactions.setProcessed("Y");errors.setTransactions(transactions);entityManager.merge(errors);我知道 ERRORS 中的 ACTIVE 字段將設(shè)置為 0,但鑒于 ERRORS 是關(guān)系的 OWNING 方,TRANSACTIONS 中的 PROCESSED 字段是否也會(huì)設(shè)置為“Y”?JPA 級(jí)聯(lián)類型如何與這樣的場(chǎng)景聯(lián)系起來?
查看完整描述

2 回答

?
楊__羊羊

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

當(dāng)我們說 Errors 是擁有方時(shí),這意味著關(guān)系的外鍵位于 Errors 表中(您正在通過@JoinColumn)。因此,關(guān)系的擁有方是另一個(gè)實(shí)體的引用列將出現(xiàn)的一方。您可以通過@OneToMany在 Transactions 實(shí)體中指定來定義關(guān)系的反面。

現(xiàn)在是關(guān)于交易和錯(cuò)誤更新的問題的第二部分。在我看來,您可以通過應(yīng)用適當(dāng)?shù)募?jí)聯(lián)模式(持久、刪除等)來更新與事務(wù)關(guān)聯(lián)的列表,這意味著您可以在@OneToMany(cascade=CASCADETYPE.MERGE) 指定反向關(guān)系的同時(shí)在事務(wù)實(shí)體中指定。這樣,如果每當(dāng)您更新一個(gè)事務(wù)行時(shí),也可以更新相應(yīng)的錯(cuò)誤行。

但是,我認(rèn)為以其他方式級(jí)聯(lián)不是一個(gè)好習(xí)慣,即如果您更新子實(shí)體,則父實(shí)體也應(yīng)該更新,因?yàn)樗赡軙?huì)導(dǎo)致許多數(shù)據(jù)不一致


查看完整回答
反對(duì) 回復(fù) 2021-08-19
?
白衣染霜花

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

在非雙向關(guān)系中,您定義一個(gè)映射。當(dāng)您對(duì)該映射進(jìn)行更改時(shí),很明顯會(huì)發(fā)生什么 - 外鍵將被更新。因?yàn)橹挥幸粋€(gè)映射,所以不會(huì)有沖突(許多 JPA 提供程序如果檢測(cè)到您有多個(gè)可寫的字段映射,就會(huì)拋出錯(cuò)誤)。

對(duì)于雙向關(guān)系,這種控制不太明顯。在您的 transaction-Error 雙向關(guān)系中,假設(shè)它是一個(gè) OneToOne 雙向映射,并且 Transaction1 設(shè)置為指向 Error1,反之亦然。假設(shè)您的應(yīng)用程序確定 Transaction1 應(yīng)該指向 Error2,并更改引用。如果 Error1 對(duì) Transaction1 的引用沒有更正以反映這種情況,那么 JPA 在確定將什么值放入外鍵時(shí)就會(huì)出現(xiàn)問題。這就是所有權(quán)發(fā)揮作用的地方。擁有方被認(rèn)為是可寫的映射,對(duì)它的更改控制外鍵字段。在 OneToMany 中,擁有方通常是 ManyToOne 反向引用,因?yàn)樗匀?,因?yàn)橥怄I無論如何都在持有 ManyToOne 的表中。

級(jí)聯(lián)與所有權(quán)無關(guān)。它只是意味著操作(持久化、合并、刪除、刷新)適用于關(guān)系引用的實(shí)體。如果使用cascade.all 調(diào)用em.refresh(transaction),事務(wù)和所有引用的錯(cuò)誤將從數(shù)據(jù)庫(kù)中刷新。任何具有 ALL 或 REFRESH 級(jí)聯(lián)設(shè)置的 Error 關(guān)系也將被刷新,依此類推。如果你把它放在后面的引用上,JPA 應(yīng)該檢測(cè)到它已經(jīng)刷新了引用的 Transaction 實(shí)例,但為什么要冒險(xiǎn)呢。通常,級(jí)聯(lián)選項(xiàng)應(yīng)僅放置在需要避免意外后果的映射上。如果您不確定是否需要它,請(qǐng)?jiān)诖_定之前將其關(guān)閉。

在您的示例中,您可能會(huì)在應(yīng)用程序?qū)鬟f的根實(shí)體上進(jìn)行級(jí)聯(lián)合并。對(duì)該圖所做的任何更改都可以通過單個(gè)合并調(diào)用輕松獲取,而無需在每個(gè)單獨(dú)的葉子上調(diào)用合并。您的模型的構(gòu)建和序列化方式會(huì)影響合并,因此通常級(jí)聯(lián)選項(xiàng)僅放在根-> 葉關(guān)系上,以避免出現(xiàn)根-> 葉-> root' where root != root' 的問題。如果雙方都有級(jí)聯(lián)合并,則 root' 的狀態(tài)可能會(huì)覆蓋您在 root 中的更改。


查看完整回答
反對(duì) 回復(fù) 2021-08-19
  • 2 回答
  • 0 關(guān)注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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