0

我有一个对象作为另一个对象的成员,比如说 Object1 和 Object 2。对象 2 在对象 1 中,并且有 3 个字段。

我从用户那里收到对象 1 的详细信息。还有来自用户的对象 2 的 ID 和名称,需要将 Object1 保存在数据库中,所以我使用 session.saveOrUpdate(object1),

它会保存 object1 并保留用户提供的 object 2 的字段,并将其他字段更改为 NULL。

我应该通过 Object2 的所有字段来避免这个问题,还是有办法阻止休眠将这些字段更改为 NULL 并保留它们的值?

Object1

 ID
 name
 @ManyToOne (cascade = CascadeType.ALL)
 Object2

Object2

  ID 
  name
  age

例子

我在数据库中拥有什么

对象 2 的 ID =13 名称=XYZ 年龄=32

用户输入

对象 1 名称 = 杰克

对象 2 ID = 13 名称=XYZ

保存object1后,object2如下

Object2 ID = 13 名称=XYZ 年龄=NULL

4

1 回答 1

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

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

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

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

  3. (a) 如果 DB 中已经存在 Object2,则加载它:

    Object2 obj2 = obj1.getObject2();  // ensures object2 loaded; 
                                       // does lazy load if required (e.g. one-to-many)
    

    (b) 否则,如果 Object2 是新的,则创建它,并将其附加到 Object1:

    Object2 obj2 = new Object2();
    obj1.setObject2(obj2);
    
  4. 通过调用 setter 方法填充 obj2 字段

  5. 如果 Object1 到 Object2 的关系有 Cascade UPDATE OR ALL:

    session.saveOrUpdate(obj1);
    

您没有在做 (3a)(或者您正在做 (3a),但随后将其替换为 (3b))。

于 2013-07-01T06:00:12.940 回答