2016-12-07 3 views
0

@Transactionalを使用すると、オブジェクトを保存した後、hibernate get関数は結合フィールドがnullのオブジェクトを返します。@Transactionalアノテーションを使用すると、多対1の関係がnullになる

これは私のビジネスレイヤーです。 @トランザクション注釈があります。

@Override 
@Transactional(propagation = Propagation.REQUIRED) 
public KonKonfigCoverView addWithNewObj(KonKonfigCoverView objView, Long kurumId) 
     throws MosBaseException { 

    EnvanterKitTanimView kitView = null; 

    if (objView.getKit() != null){ 
     kitView = objView.getKit(); 
     if ("0001".equals(kitView.getEnvanterKitTip().getKod())){ //ATS 
      kitView = atsKitBO.addObj(kitView, kurumId); 
     } 
     else if("0002".equals(kitView.getEnvanterKitTip().getKod())){ //OGSHGS 
      kitView = ogsHgsBO.addObj(kitView, kurumId); 
     } 
     else if("0004".equals(kitView.getEnvanterKitTip().getKod())){ //TTS 
      kitView = akaryakitKitBO.addObj(kitView, kurumId); 
     } 
     objView.getKonKonfig().setKit(kitView); 
     objView.getKonKonfigDegisiklikDetay().setKit(kitView); 
     objView.setKit(kitView); 
    } 

    KonKonfigCoverView view = this.addObj(objView, kurumId); 

    if (objView.getKit() != null){ 
     view.setKit(kitView); 
    } 
    return view; 
} 

これはthis.addObj機能は次のとおりです。

@Override 
public KonKonfigView addObj(KonKonfigView view, Long kurumId) throws MosBaseException{ 

    KonKonfig addedObj = konKonfigDAO.addObj(beforeAddObj, ilkTakilmaOdo, sonTakilmaOdo); 
    addedObj= konKonfigDAO.getObj(addedObj.getId()); 

    return (KonKonfigView) BaseHelper.gulmekYok(KonKonfig.class, KonKonfigView.class, addedObj, true, EnViewTip.FULL_DESCRIPTION, null); 
} 

この追加操作はうまく機能、しかしgetObj関数が返すは多対一の関係フィールドがNULLであることをオブジェクト。ヌルくる私のフィールドの

一つということです:あなたは、囲んでいるオブジェクトを保存する前に、車のオブジェクトを保存している場合を除き

@ManyToOne(optional=true) 
@JoinColumn(name="CAR_ID", insertable=false, updatable=false) 
private Car car; 

答えて

0

、そのフィールドは間違いなくnullになります。 Hibernateは、@ManyToOneマッピングのカスケードタイプをnoneに設定します。

これは、特定のカスケードタイプを指定しない限り、内部オブジェクトに実行された操作は、内部にマップされたオブジェクトに対して実行されないことを意味します。そう、あなたが必要なもののために正しいものを選択することができます

Option 1: @ManyToOne(cascade = CascadeType.PERSIST) 

Option 2: 
@ManyToOne 
@Cascade(CascadeType.PERSIST) 

チェックアウト異なるCascadeTypes

あなたは、この問題を解決するために、次の操作を行うことができます。

+0

それは問題を解決しませんでした。私は車のオブジェクトを保存しないという理由があると思います。私はフロントエンドで囲むオブジェクトに車のIDを割り当てます。私は車のオブジェクトの2つのフィールドを持っています。 @ManyToOne(オプション= true)@JoinColumn(name = "CAR_ID"、挿入可能= false、更新可能= false)専用車。 @Column(name = "CAR_ID")private long carId; '閉じたオブジェクトを保存すると、carオブジェクトのidを含む** carId **フィールドに保存してから、そのオブジェクトを取り戻します。 @Transactionalアノテーションを使わない限り、** car **オブジェクトも持ち込みます。 @Transactionalカーオブジェクトを使用した場合、nullが返されます。 –

関連する問題