假设我有一个class A
,它有一个属性class B
。休眠 - ManyToOne/OneToOne具有级联选项
我知道每class A
只会有一个class B
,所以我将其与OneToOne
进行映射。如果我错误地将相同的class B
添加到第二个class A
,则两个class A
都引用相同的class B
(因此,如果设置了CascadeType.ALL
,则删除其中一个对象将删除另一个引用的地址)。这一切都有道理。
不过,如果我知道有可能是class B
多个(相同)的实例在数据库中,和我想要的任何class A
s到使用此坚持,如果它存在的属性,我以为我会这样实体映射为ManyToOne
和JPA/hibernate将负责检查数据是否已经存在于数据库中(加载然后使用相等)。看来情况并非如此。
的ManyToOne
关系完全相同的方式与OneToOne
上述作品 - 即只要我删除class A
对象引用class B
对象中,“B类”对象被删除,太一(即使其他地方引用)。我希望JPA/hibernate在删除前检查这个class B
对象没有被任何其他class A
对象引用(即使使用CascadeType.ALL
设置 - 因为它被标记为ManyToOne
关系)。
我在这里错过了什么吗?
我们确实需要确切地知道您是如何声明实体及其关系的。 –
你能举一个真实的例子,以便我们能以更好的方式帮助你。 –
当然。参考“地址”的“人物”。我已经在'Address'对象中实现了相等性,以及逐行相等,以及hashcode方法。其他一切如上... – user2482461