2015-11-20 64 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? –