2015-11-20 72 views
0

有沒有在父子關係中使用級聯有用的情況? 其實我使用一直級聯,我想知道如果這可能是有趣的,以避免使用它們。無級聯的父子關係

@Entity 
public class Lodger{ 
    @OneToMany 
    private List<Bail> bailList; 
    ... 
} 

@Entity 
public class Bail { 
    @OneToMany 
    private List<Rent> rents; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "lodger_id") 
    private Lodger lodger; 

    @OneToOne 
    private Room room; 
} 

@Entity 
private class Rent{ 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "bail_id") 
    private Bail bail; 

    @OneToMany 
    private List<RoomPayment> roomPayment; 
} 

@Entity 
private class RoomPayment{ 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "rent_id") 
    private Rent rent; 
} 

所以所有的關係似乎都是構圖。如果我創建一個新的RoomPayment,是它更好地做到:

roomPayment.setRent(rent); 
roomPaymentDao.save(roomPayment); 


rent.getRoomPayment().add(roomPayment); 
rentDao.save(rent); 
+0

我在這裏看不到任何級聯?你想知道在哪裏放級聯?在這種情況下,你應該閱讀我的答案 - 關於作文的部分。我無法告訴你哪些對象具有_no獨立存在_,因爲這取決於您的域。例如,在一個領域中,引擎總是需要一輛汽車,而在另一個領域則可以獨立存在。 –

+0

所以所有的關係似乎都是構圖,請參閱我的編輯。 –

回答

0

我想你組成父混合起來 - 子關係

組成

wikipedia definition

這是...稱爲複合,如果它指的對象是真正的部分,即沒有獨立存在

複合關係始終使用CascadeType.ALL[CascadeType.PERSIST, CascadeType.REMOVE]建模(對於想要在onl上更新的巨大對象如果需要的話)。如果你在這裏沒有使用級聯,你沒有組合。

父 - 子關係

有不同的關係可以被稱爲父 - 子關係。我猜你是在談論類似的目錄關聯:

@Entity 
public Directory { 
    @ManyToOne 
    private Directory parent; 

    @OneToMany(mappedBy = "parent") 
    private Collection<Directory> children; 
} 

在你經常需要手動管理的關聯,因爲你不想要更新整個樹,如果你改變的屬性的話根目錄。

你可以添加CascadeType.REMOVEchildren協會 - 但它是最好刪除子目錄明確,以防止有害的錯誤(如明確-rrm)。

+0

好吧,我編輯瞭如果我想保存新的保釋金(沒有租金)?如何節省租金?如何保存roomPayment? –