合并后数据库未更新
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);
我正在尝试使用 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);