在父 - 子关系中不使用级联是否有用? 实际上我总是使用级联,我想知道这是否有趣,以避免使用它们。
@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 :(得分:0)
我认为你正在混淆作品和父子关系。
<强>组合物强>
它被称为复合,如果它所引用的对象实际上是它的部分,即没有独立存在
复合关系始终使用CascadeType.ALL
或[CascadeType.PERSIST, CascadeType.REMOVE]
建模(对于您希望仅在必要时更新的大型对象,后者)。如果您在这里不使用级联,则表示没有合成。
亲子关系
可以将不同的关系称为父 - 子关系。我猜你在谈论像目录关联这样的东西:
@Entity
public Directory {
@ManyToOne
private Directory parent;
@OneToMany(mappedBy = "parent")
private Collection<Directory> children;
}
在这种情况下,您通常需要手动管理关联,因为如果更改根目录的属性,则不希望更新整个树。
您可以将CascadeType.REMOVE
添加到children
关联中 - 但最好明确删除子目录以防止出现有害错误(例如-r
的显式rm
)。< / p>