+1 امتیاز
قبل در برنامه نویسی توسط (28 امتیاز)
ویرایش شده قبل توسط

سه تا جدول داریم که به صورت زیر می باشد . سوالم اینه که فرض کنید سطری از جدول Table1 حذف میشه حالا چطور باید سایر سطرهایی که با کلید خارجی با سطر حذف شده ارتباط دارند رو حذف کرد. روشی که استفاده کردم این بود که اول سطرهای مربوط به Table2 و Table3 رو حذف کردم بعد سطر مربوط به Table1 رو حذف کردم. فک میکنم این روش هزینه بره!

@Entity
@Table(name = "Table1")
public class Entity0 implements Serializable{
private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    @Column(name = "foriegnID")
    private Integer foriegnID;

    @OneToOne(fetch =FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "map_name")
    private Entity entity1;

    @OneToMany(mappedBy = "map_name", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<Entity2> entities;

===================================================

@Entity
@Table(name = "Table2")
public class Entity1 implements Serializable{
private static final long serialVersionUID = 1L;

    @Id
    @GenericGenerator(name = "generator", strategy = "increment")
    @Column(name = "id")
    private int id;

    @OneToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="foriegnID",
         insertable=true, updatable=false,
         nullable=true)

    private Entity0 entity0;

======================================================

@Entity
@Table(name = "Table3")
public class Entity2{

    @Id
    @GeneratedValue
    @Column(name = "id")
    private Integer id;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="foriegnID",
            insertable=true, updatable=true,
            nullable=true)
    private Entity0 entity0;

پیشنهاد شما چیه؟

ممنون

2 پاسخ

+1 امتیاز
قبل توسط (28 امتیاز)
ویرایش شده قبل توسط
 
بهترین پاسخ

کد مربوط به حذف مورد خواسته شده در سوال:

@Transactional
public void deleteEntity0(int entity0Id) {
  Entity0   entity0;
   entity0 =  entityService.getEntity0(entity0Id);//
  sessionFactory.getCurrentSession().delete(entity0);
}
+1 امتیاز
قبل توسط (1.1هزار امتیاز)

 کافی است در روابط OneToMany و OneToOne که در Entity0 وجود دارد از CascadeType.REMOVE یا CascadeType.ALL استفاده کنید. حالا در صورتی که Entity0 را remove کنید بصورت خودکار Entity1 و Entity2 نیز remove می شوند.

قبل توسط (28 امتیاز)
حتما جواب رو میزارم. لطف کنید بگین که روش درستی هست یا نه؟
قبل توسط (1.1هزار امتیاز)
بله حتما بهتره که از این روش رفتید. در زمان استفاده از ORM این روش که شما رفته اید توصیه می شود تا اجرای مستقیم query.

سوالات مشابه

+1 امتیاز
1 پاسخ 898 بازدید
سوال شده 4 سال قبل در برنامه نویسی توسط masoud shahhosseini_ (45 امتیاز)
0 امتیاز
0 پاسخ 643 بازدید
+1 امتیاز
1 پاسخ 407 بازدید
0 امتیاز
1 پاسخ 298 بازدید
سوال شده 4 سال قبل در برنامه نویسی توسط masoud65 (27 امتیاز)
0 امتیاز
1 پاسخ 582 بازدید
سوال شده 4 سال قبل در برنامه نویسی توسط 1993 (242 امتیاز)
0 امتیاز
3 پاسخ 689 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط یوری (426 امتیاز)
+1 امتیاز
0 پاسخ 263 بازدید
0 امتیاز
1 پاسخ 403 بازدید
...