objectdb : อัปเดตชุดลูก‹> ของพาเรนต์หลังจากลบลูกหนึ่งออกแล้วไม่ทำงาน

ในใบสมัครของฉัน ฉันมีบุคคลและกิจกรรมสองรายการ

@Entity
public class Person
{
  .
  .
  .
  @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,orphanRemoval=true)
  Set<Activity> a;

  // getters setters constructors
}

... และ...

@Entity
public class Activity
{
  .
  .
  .
  // getters setters constructors
}
  1. ในตอนแรกฉันสร้างวัตถุของกิจกรรมสองรายการ
  2. ฉันเพิ่มวัตถุของกิจกรรมให้กับวัตถุบุคคล
  3. ฉันยืนยันวัตถุบุคคล (วัตถุกิจกรรมทั้งสองยังคงอยู่ มันทำงานได้ดี)
  4. จากนั้น ฉันจะลบวัตถุกิจกรรมหนึ่งรายการออกจากฐานข้อมูลของฉัน
  5. ฉันเลือกวัตถุบุคคลของฉันจากฐานข้อมูล

ผลลัพธ์คืออ็อบเจ็กต์ Person ที่มี Set<Activity> พร้อมด้วย size=2

ใครสามารถช่วยฉันหน่อยได้ไหม?


person user3543087    schedule 09.07.2014    source แหล่งที่มา


คำตอบ (1)


เมื่อคุณลบวัตถุกิจกรรมออกจากฐานข้อมูล คุณจะต้องอัปเดตชุดในบุคคล และลบวัตถุกิจกรรมนั้นออกจากชุดด้วย มิฉะนั้น คุณจะมีการอ้างอิงที่เสียหายไปยังออบเจ็กต์กิจกรรมที่ไม่มีอยู่ในชุด

ในทางกลับกัน เนื่องจากคุณเปิดใช้งาน orphanRemoval คุณก็สามารถลบ กิจกรรมจากชุดในบุคคลและควรลบออกจากฐานข้อมูลโดยอัตโนมัติ

อีกทางเลือกหนึ่งคือกำหนดชุดเป็น mappedBy จากนั้นชุดจะเป็น อัปเดตโดยอัตโนมัติเมื่อกิจกรรมถูกลบออกจากฐานข้อมูล เมื่อวัตถุบุคคลถูกโหลดอีกครั้งจากฐานข้อมูลหรือรีเฟรช

person ObjectDB    schedule 11.07.2014
comment
แต่จะเพิ่ม mappedBy ด้วยการเชื่อมโยงทิศทางเดียวของฉันได้อย่างไร เพราะ set‹Person› ในคลาส Activity ฉันไม่ต้องการมัน - person user3543087; 13.07.2014
comment
คุณจะต้องเพิ่มการอ้างอิงจากกิจกรรมไปยังบุคคล - person ObjectDB; 13.07.2014