0

別のオブジェクトのメンバーとしてオブジェクトがあります。たとえば、Object1 と Object 2 です。オブジェクト 2 はオブジェクト 1 にあり、3 つのフィールドがあります。

ユーザーからオブジェクト 1 の詳細を受け取りました。また、ユーザーからのオブジェクト 2 の ID と名前、DB に Object1 を保存する必要があるため、session.saveOrUpdate(object1) を使用します。

ただし、オブジェクト1を保存し、ユーザーが提供したオブジェクト2のフィールドを保持し、他のフィールドをNULLに変更します。

Object2 のすべてのフィールドを渡してこの問題を回避する必要がありますか、または休止状態でこれらのフィールドを NULL に変更して値を保持するのを防ぐ方法はありますか?

Object1

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

Object2

  ID 
  name
  age

私がDBに持っているもの

Object2 の ID =13 name=XYZ age=32

ユーザーが入力

Object1 名 = ジャック

Object2 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) Object2 がすでに DB に存在する場合は、それをロードします。

    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 に答える