onetoone و joincolumn ، حذف تلقائي ، كيان فارغ ، قابل للتنفيذ؟
-
27-09-2019 - |
سؤال
لديّ كيانان ، مع تعليقات JPA التالية:
@Entity
@Table(name = "Owner")
public class Owner implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private long id;
@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
@JoinColumn(name="Data_id")
private Data Data;
}
@Entity
@Table(name = "Data")
public class Data implements Serializable
{
@Id
private long id;
}
المالك والبيانات لديه رسم خرائط فردي ، الجانب امتلاك هو المالك. تحدث المشكلة عندما أقوم بتنفيذ: owner.setData (null) ؛ ownerdao.update (مالك) ؛ يصبح جدول "المالك" Data_id فارغًا ، وهذا صحيح.
لكن صف "البيانات" لم يتم حذفه تلقائيًا. لا بد لي من كتابة datadao آخر ، وطبقة خدمة أخرى لالتفاف عن الإجراءين (ownerDao.update (owner) ؛ datadao.delete (data) ؛) ؛)
هل يمكن حذف صف البيانات تلقائيًا عندما يقوم المالك المملوك بتعيينه على NULL؟
المحلول
اعتمادًا على إصدار السبات الخاص بك ، استخدم:
استخدم cascadetype: delete_orphan أو OrphanRemoval = True on the OnetOone Eanotation
توثيق : http://docs.jboss.org/hibernate/core/3.3/reference/en/html/objectstate.html#objectstate-transitive
لم أجربها مطلقًا على OneToone ، ولكن من المستند ، يجب أن تعمل.
@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
@JoinColumn(name="Data_id")
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Data Data;
أو
@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="Data_id")
private Data Data;
تحرير: لقد وجدت هذا المنشور: الحل البديل لعدم وجود دعم حذف الأورفان للعلاقات الفردية والعديد من العدد إلى واحد؟
لذا فإنه لا يعمل بيراب. الإجابات اثنين تصف اثنين من الحلول المختلفة.