onetoone و joincolumn ، حذف تلقائي ، كيان فارغ ، قابل للتنفيذ؟

StackOverflow https://stackoverflow.com/questions/3035178

  •  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;

تحرير: لقد وجدت هذا المنشور: الحل البديل لعدم وجود دعم حذف الأورفان للعلاقات الفردية والعديد من العدد إلى واحد؟

لذا فإنه لا يعمل بيراب. الإجابات اثنين تصف اثنين من الحلول المختلفة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top