Consider the following class:
Class MainObject {
....
ChildObject1 child1;
ChildObject2 child2;
ChildObject3 child3;
ChildObject4 child4;
}
我需要使用Hibernate保存一个新创建的MainObject类型的对象。我向它添加了两个新创建的对象child1和child2,因为它们不存在于DB中。 我们假设child3和child4已经存在于DB中。但是,我可能不喜欢从DB加载整个对象并将它们添加到MainObject,因为这些对象可能具有太多属性,这是不需要的。 所以我只获取两个对象的DB键,并将键添加到新实例化的ChildObject3和ChildObject4对象(其他所有字段都为null)。我将这些对象添加到MainObject。
现在,如果我尝试在CASCADED模式下保存MainObject,那么ChildObject3和ChildObject4也将在DB中使用所有空值更新,这是我不想要的。我想要的是一种级联方式,只有非持久化对象才会保存到DB(在本例中为ChildObject1和ChildObject2)。保存数据库密钥的其他对象不会更新,只能用于保存MainObject。
我知道级联不能以这种方式运作。有没有其他方法可以刷新整个对象层次结构,以便从DB中刷新ChildObject3和ChildObject4,然后我可以在级联模式下保存MainObject?或者我可以在callout方法中放入某些条件,是否通过检查对象是否包含DB密钥来更新或更新对象?
我觉得这是一项必要的操作。每当我们保存一个新对象时,我们可能并不总是想要加载所有内部对象的所有属性,只是为了能够以级联模式保存主对象。我们所需要的只是数据库主键,可能不喜欢通过加载所有内部对象的所有字段来强调内存。
任何好的解决方案或最佳做法,请建议。