0

我想更新数据库的 UserData 属性之一,它具有(名称、街道、城市等),所以:

关系和数据库属性: 此 UserData 与他的用户有双向关系,其中使用 User.hbm.xml 上的 cascade="save-update",所以

用户在数据库中有这个属性(id_user,外键: id_UserDetail,状态)

UserData有(id_UserDetail、外键: id_User 和经典信息字段名称、街道、电话等)

我使用这种方法更新到数据库: 更新方法

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);
}

此方法在我的 Jsf 页面上用作侦听器形式<a4j:>,但这没有问题,

我需要以某种方式修复此方法以仅更新我需要的这个 DB 字段,而其余部分必须取消,但在这种情况下,我成功地进行了更改,例如在字段“名称”上通过特定 ID 更新字段名称,但其余的 UserData 列是覆盖为NULL,

有人可以给我一些建议如何修改此方法吗?或者可以根据这种情况编写自己的方法,这会导致只更新我想要更新的这个字段,而不是数据库中的 NULL,非常感谢你的帖子和回复,干杯,

4

1 回答 1

0

出现此问题是因为在您保存/更新用户的实例时,它的 FK 属性没有值。因此 FK 属性的值变为空。

为避免这种情况,您可以按照下面提到的任何一种方式进行操作:

  1. 不要使用 hibernate API 更新实例,而是编写一个 HQL 来仅修改您想要更改的属性。(例如你的名字。)
  2. 从休眠会话加载用户实例,更改该实例中所需属性的值,更新用户实例。所有这 3 个操作必须在单个休眠会话中完成。
于 2013-03-07T06:52:26.283 回答