Hibernate saveOrUpdate命令将现有行的字段更改为NULL

时间:2013-07-01 02:07:24

标签: hibernate java-ee

我有一个对象作为另一个对象的成员,比如说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

1 个答案:

答案 0 :(得分:1)

  1. (a)如果DB中已存在Object1,则检索它:

    Object1 obj1 = session.find(...);
    

    (b)否则,如果Object1是new,则创建它:

    Object1 obj1 = new Object1();
    
  2. 通过调用setter方法填充obj1字段

  3. (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);
    
  4. 通过调用setter方法填充obj2字段

  5. 如果Object1到Object2关系具有Cascade UPDATE或ALL:

    session.saveOrUpdate(obj1);
    
  6. 你没有做(3a)(或者你正在做(3a),但后来用(3b)替换它。)