当我读到有关级联和反向时,据说两者都做了完全不同的事情。 级联:在级联中,在完成一个操作(保存,更新和删除)之后,它决定是否需要在彼此有关系的另一个实体上调用其他操作(保存,更新和删除)。 反向:这用于决定哪一方是关系所有者来管理关系(插入或更新外键列)。
假设我保存了有孩子的父母。所以当我设置一对多的逆=“真”cascade =“all”一方面我希望那个孩子是关系的所有者,所以保存父母应该改变孩子的集合,但是当我 添加cascade =“all”hibernate会改变这种行为并坚持孩子。
那么如果级联改变了反向的行为,它们是如何不同的?
答案 0 :(得分:1)
让我们举个例子:
业主方是Line。反面是订单。
这意味着,如果您坚持Order
,请坚持Line
,将该行添加到集合Order.lines
,但不要设置Line.order
,Hibernate将考虑这两个实体之间不存在任何关联。为什么?因为您只设置了关联的反面(Order.lines
),而不是所有者端(Line.order
)。
Cascade与此无关。我们假设Order.lines
使用cascade=PERSIST
进行注释。这意味着,如果您创建Order
,请创建Line
,将Line
添加到Order.lines
,并保留订单,Hibernate也会自动调用persist()
在Line
上。因此Line
将被保留,而不必明确地使用此行调用persist()
。但是这两个实体之间的关联仍然没有保存在数据库中,因为您仍然没有设置关联的所有者方:Line.order
。