簡體   English   中英

在JPA 2.0中維護關系

[英]Maintaining relationships in JPA 2.0

我已經使用了JPA 2.0一段時間,但,傷心地承認,我還沒有足夠的時間好好學習。 似乎我缺乏如何使用Entity Manager的基礎知識。

一次移動一個步驟,我首先要問您有關維護映射實體之間關系的問題。 當然,我知道如何在實體,不同類型的可用關聯( OneToOne等)之間創建映射,以及數據庫通常如何工作。 我只是專注於通過Entity Manager進行維護,所以請不要讓我進入任何種類的常識教程:-)。

問題是:

  1. 我是否正確,作為一名程序員,我負責維護(創建/更新/刪除)實體實例之間的關系?
  2. 我是否必須始終手動手工更新(設置為null,從集合中刪除等)實例?
  3. 普通SQL可以在刪除時將實體設置為NULL,但是JPA似乎無法做到這一點。 手動執行似乎也很麻煩。 JPA有辦法實現嗎?
  4. 如果我具有OneToMany關系並將其設置為NULL,則該關系的Many端上的實體。 然后,我通過保存在實體堅持一個集變化One側面。 然后,我是否必須更新Many端的實體,並在每個實例中將關聯設置為NULL? 似乎純粹的傻瓜式單向綁定!

提前致謝!

您需要研究的主要內容是在實體上進行映射時具有的不同選項。 例如,在下一段代碼中,層疊全部選項將指示jpa在刪除父級列表時刪除子級列表。

@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL }, mappedBy = "parent")
private Set<Child> events = new HashSet<Child>();
  1. 是。 您維護對象樹並對其進行修改以使其看起來像您想要的。
  2. 是的,沒有。 如果您希望實體引用null,則可以。 例如,如果要刪除一個實體,則應清除其他未被刪除的實體對其的引用。 一個實際的例子:讓員工知道他/她的經理已被放任的良好做法。 如果該員工要留下,則應先刪除其經理參考,或將其設置為其他經理,然后才能刪除當前經理。
    如果也要罷免員工,則級聯刪除可以級聯到經理的所有下屬,在這種情況下,您不需要清理他們對經理的引用-因為他們也要刪除。
  3. 我不太明白什么SQL設置為null。 刪除將刪除數據庫中的行,因此沒有任何要設置為null的內容。 在對象模型中清理引用並不是那么困難,因為JPA有許多事件可以幫助您進行處理,例如preremove preupdate等。最后,問題出在Java對象上。 它們只是java對象,因此,如果您想完成某件事,那么您的應用程序將需要在大多數情況下完成它。 JPA處理構建它們並將它們推送到數據庫,而不是為您更改狀態。
  4. 是的,沒有。 如果建立雙向關系,則必須如上所述保持雙方。 如果將孩子的父母引用設置為null,則應該讓父母知道它不再有孩子了,不是嗎? 只要該父級實例存在,您的父級就會繼續引用其子級。 因此,即使通過擁有關系的一方來更新/控制數據庫,對象模型也將與數據庫不同步,直到刷新或以某種方式重新加載為止。 JPA允許多級緩存,因此這完全取決於您的提供程序設置,該父實例將引用數據庫中不再存在的子代存在多長時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM