0

(name、street、cityなど)を持つUserDataのプロパティの1つをdatabgaseに更新したいので:

リレーションシップとDBプロパティ: このUserDataは、User.hbm.xmlのcascade = "save-update"が使用されているユーザーと双方向のリレーションシップを持っているため、

ユーザーはDBにこのプロパティを持っています(id_user、外部キー: id_UserDetail、status)

UserDataには(id_UserDetail、外部キー: id_User、およびクラシック情報フィールドname、street、telephoneなど)があります

このメソッドを使用してデータベースを更新します: Updateメソッド

public void ajaxNameListener(AjaxBehaviorEvent event) {         

             UserData usrData = new UserData();
             userData.setName(name);  // I want update only name property,but unfortunately rest is also overwriten to null in DB

                 User user = BeanFactory
                        .getHotelDAOService(User.class)
                         .findbyIdIndetifier(selectedUserId);   // selectedUserId is just identifier from my list of user,so here i declared which concrete User be updated by Id of Users           

                    user.setUserData(userData);
          BeanFactory.getHotelDAOService(User.class)
                    .update(user);
}

このメソッドは<a4j:>私のJsfページでリスナーフォームとして使用されていますが、これには問題はありません。

どういうわけかこのメソッドを修復して、必要なものだけを更新し、残りは変更しない必要がありますが、この場合、たとえばフィールド'name'でこの更新フィールド名を特定のIDで変更することに成功しましたが、残りのUserData列はNULLに上書きされ、

誰かが私にこのメソッドを変更する方法についてアドバイスを入力できますか?または、このケースに基づいて独自のメソッドを作成することもできます。これにより、更新したいフィールドのみが更新され、データベースではNULLになりません。投稿と応答に感謝します、乾杯、

4

1 に答える 1

0

この問題は、ユーザーのインスタンスを保存/更新するときに、その FK プロパティに値がないために発生します。そのため、FK プロパティの値は null になります。

これを回避するには、以下のいずれかの方法に従ってください。

  1. hibernate API を使用してインスタンスを更新する代わりに、HQL を記述して、変更したいプロパティのみを変更します。(例:あなたの場合の名前。)
  2. ユーザーのインスタンスを hibernate セッションからロードし、そのインスタンスの目的のプロパティの値を変更し、ユーザー インスタンスを更新します。これら 3 つの操作はすべて、1 つの休止状態セッションで実行する必要があります。
于 2013-03-07T06:52:26.283 に答える