我有一个对象作为另一个对象的成员,比如说Object1和Object2。 对象2在对象1中,并具有3个字段。
我从用户那里收到了对象1的详细信息。 来自用户的对象2的ID和名称,需要将Object1保存在DB中,以便我使用 session.saveOrUpdate(object1),
但它保存了object1并保留了用户提供的对象2的文件,并将其他文件更改为NULL。
我应该通过Object2的所有文件来避免这个问题,还是有办法阻止hibernate将这些字段更改为NULL并保留它们的值?
Object1
ID
name
@ManyToOne (cascade = CascadeType.ALL)
Object2
Object2
ID
name
age
示例
我在DB中有什么
Object2的ID = 13 name = XYZ age = 32
用户输入
Object1 name = Jack
Object2 ID = 13 name = XYZ
保存object1后,object2将如下所示
Object2 ID = 13 name = XYZ age = NULL
答案 0 :(得分:1)
(a)如果DB中已存在Object1,则检索它:
Object1 obj1 = session.find(...);
(b)否则,如果Object1是new,则创建它:
Object1 obj1 = new Object1();
通过调用setter方法填充obj1字段
(a)如果DB2中已存在Object2,则加载它:
Object2 obj2 = obj1.getObject2(); // ensures object2 loaded;
// does lazy load if required (e.g. one-to-many)
(b)否则,如果Object2是new,则创建它,并将其附加到Object1:
Object2 obj2 = new Object2();
obj1.setObject2(obj2);
通过调用setter方法填充obj2字段
如果Object1到Object2关系具有Cascade UPDATE或ALL:
session.saveOrUpdate(obj1);
你没有做(3a)(或者你正在做(3a),但后来用(3b)替换它。)