合并后数据库未更新

Database is not updating after merging

我正在尝试使用 userID 更新和合并数据库同一行中的新数据。 我的代码 运行ning 顺利并且没有错误,但是在设置值之后我的数据库没有得到更新。 我应该如何 GET 我的更新值到我的数据库 table?我卡住了..请帮助我

这是我正在尝试 运行 的代码片段。首先,我匹配 NIC 号码以从 table 获取 userID,然后为该 ID

设置新值

/XHrUserDao Class代码/

public Integer findPersonXHrUserId(String nic)
    {
      Query query = em.createQuery("select u.userId from XHrUser u where (u.nic) = (:nic)")
              .setParameter("nic", nic);
      List<Integer> list = query.getResultList();
      return list.isEmpty() || list.get(0) == null ? 0 : list.get(0);
    }


    public void UpdateUserInDbTable(String firstName, String lastName, String nic, String phoneNumber, String emailAddress) {

        int userId = findPersonXHrUserId(nic);
        XHrUser xHrUserObj= new XHrUser();

        xHrUserObj.setUserId(userId);
        xHrUserObj.setFirstName(firstName);
        xHrUserObj.setLastName(lastName);
        xHrUserObj.setNic(nic);
        xHrUserObj.setPhone(phoneNumber);
        xHrUserObj.setEmail(emailAddress);


        xHrUserObj= em.find(XHrUser.class, xHrUserObj.getUserId());     

        em.merge(xHrUserObj);
        em.flush();
        em.refresh(xHrUserObj);

    }

/XHrUser Class代码/

package hr;
import java.io.Serializable;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;


@Entity     //tells that its an entity class

@Table(name = "x_hr_user")  //specify the name of the db table to be used 

public class XHrUser implements Serializable {


private static final long serialVersionUID = 1L;

 @Id    //indicating its the primary key of the table
 @Basic(optional = false)

 @Column(name = "user_id")
 private Integer userId;


 @Column(name = "first_name")
 private String firstName;


 @Column(name = "last_name")
 private String lastName;


 @Column(name = "nic")
 private String nic;


 @Column(name = "phone")
 private String phone;


 @Column(name = "email")
 private String email;


public XHrUser() {

 }

public Integer getUserId() {
    return userId;
}

public void setUserId(Integer userId) {
    this.userId = userId;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public String getNic() {
    return nic;
}

public void setNic(String nic) {
    this.nic = nic;
}

public String getPhone() {
    return phone;
}

public void setPhone(String phone) {
    this.phone = phone;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
    }

 }

/用户服务Class/

package hr;

import java.io.Serializable;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

@Stateless
public class UserService implements Serializable {

 private static final long serialVersionUID = 1L;

 @EJB
 private XHrUserDao userDao;

 public void UpdateUser(String firstName,String lastName,String nic,String phoneNumber, String emailAddress)
 {
     userDao.UpdateUserInDbTable(firstName, lastName, nic,phoneNumber,emailAddress);
 }

}

/支持Class/ /它从用户获取数据并将其传递给服务 Class/

package hr;

import java.io.Serializable;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;


@ManagedBean
@RequestScoped
public class GetUpdatedUserBacking implements Serializable {

    private static final long serialVersionUID = 1L;

    private String firstName;
    private String lastName;
    private String nic;
    private String phoneNumber;
    private String emailAddress;

    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getNic() {
        return nic;
    }
    public void setNic(String nic) {
        this.nic = nic;
    }
    public String getPhoneNumber() {
        return phoneNumber;
    }
    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
    public String getEmailAddress() {
        return emailAddress;
    }
    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }

    @EJB
    private UserService userService;
    public GetUpdatedUserBacking () {

    }
    public String UpdatingInfor()
    {
        String response;
        UpdateUserInformation(firstName, lastName, nic,phoneNumber,emailAddress);
        response="ViewUpdatedDetails.xhtml";

        return(response);
    }
    public void UpdateUserInformation(String firstName,String lastName,String nic,String phoneNumber, String emailAddress){
        userService.UpdateUser(firstName, lastName, nic,phoneNumber,emailAddress);
        }


}

好像autocommit设置为false,这样你就可以进行以下操作了

EntityTransaction txn = em.getTransaction();
txn.begin();
em.merge(xHrUserObj);
em.flush();
txn.commit();

em.find() 从数据库中获取状态,并用设置器替换您创建和更新的用户对象。尝试首先从数据库中获取实体,然后通过设置器更新它(无需更改 id)并合并它。

    int userId = findPersonXHrUserId(nic);
    XHrUser xHrUserObj= em.find(XHrUser.class, userId); 

    xHrUserObj.setFirstName(firstName);
    xHrUserObj.setLastName(lastName);
    xHrUserObj.setNic(nic);
    xHrUserObj.setPhone(phoneNumber);
    xHrUserObj.setEmail(emailAddress);

    em.merge(xHrUserObj);
    em.flush();
    em.refresh(xHrUserObj);