[英]Unable to update table using hibernate spring mvc
我的實體類如下
package com.ibs.entity;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name = "InitialMedicalCheckUpG3")
public class InitialMedicalCheckUpEntity {
private int imcsId;
private String empId, status, updatedBy, remarks;
Date updatedOn;
@Column(name = "IMCS_ID")
public int getImcsId() {
return imcsId;
}
public void setImcsId(int imcsId) {
this.imcsId = imcsId;
}
@Id
@Column(name = "EMP_ID")
@GeneratedValue(generator = "increment", strategy = GenerationType.AUTO)
@GenericGenerator(name = "increment", strategy = "increment")
public String getEmpId() {
return empId;
}
public void setEmpId(String empId) {
this.empId = empId;
}
@Column(name = "STATUS")
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
@Column(name = "UPDATED_BY")
public String getUpdatedBy() {
return updatedBy;
}
public void setUpdatedBy(String updatedBy) {
this.updatedBy = updatedBy;
}
@Column(name = "REMARKS")
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "UPDATED_ON", insertable = false)
public Date getUpdatedOn() {
return updatedOn;
}
public void setUpdatedOn(Date updatedOn) {
this.updatedOn = updatedOn;
}
}
數據訪問對象->
package com.ibs.dao;
import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.ibs.entity.InitialMedicalCheckUpEntity;
@Repository
public class InitialMedicalCheckUpDaoImpl implements InitialMedicalCheckUpDao {
@Autowired
SessionFactory sessionFactory;
@Override
public List<InitialMedicalCheckUpEntity> getConfirmedList() {
// TODO Auto-generated method stub
return null;
}
@Override
public List<InitialMedicalCheckUpEntity> getNonConfirmedList() {
// TODO Auto-generated method stub
return null;
}
@Override
public void update(InitialMedicalCheckUpEntity e) {
// TODO Auto-generated method stub
System.out.println(e.getStatus());
sessionFactory.getCurrentSession().update(e);
}
}
Hibernate為我的更新語句-> Hibernate准備了以下查詢:update InitialMedicalCheckUpG3 set IMCS_ID = ?, REMARKS = ?, STATUS = ?, UPDATED_BY = ?, UPDATED_ON =? 其中EMP_ID =?
因此該表未更新。
我從服務類->包com.ibs.service使用Dao;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ibs.dao.InitialMedicalCheckUpDao;
import com.ibs.entity.InitialMedicalCheckUpEntity;
@Service
public class InitialMedicalCheckUpServiceImpl implements
InitialMedicalCheckUpService {
@Autowired
InitialMedicalCheckUpDao dao;
@Override
public List<InitialMedicalCheckUpEntity> getConfirmedList() {
// TODO Auto-generated method stub
return null;
}
@Override
public List<InitialMedicalCheckUpEntity> getNonConfirmedList() {
// TODO Auto-generated method stub
return null;
}
@Override
@Transactional
public void update(InitialMedicalCheckUpEntity e) {
// TODO Auto-generated method stub
dao.update(e);
}
}
通過休眠的每個操作都需要與一個事務關聯。 您需要確保更新操作是事務的一部分,並且已提交此工作單元。 確保您將此操作與事務關聯並提交。
在InitialMedicalCheckUpDaoImpl
類之前或每個方法之前使用@Transactional
批注。 然后,Spring將自動為此類中的所有方法添加事務特性。 當您要進行的事務可以執行多個操作時,這樣做有一個缺點。
更好的設計是擁有另一個類(服務),該類調用dao中定義的方法。 然后可以使用@Transactional
注釋此類。 這將導致更好的事務定義,因為某些事務然后可以跨越一個以上的數據庫操作,例如insert然后更新。
編輯
我只是注意到您尚未在實體類中覆蓋equals和hashcode方法。 休眠需要這些信息來知道實體在更新之前是否已存在於數據庫中,該實體是否在某個時候從會話中分離出來或在集合中使用過。 您可以為此使用id字段。
@Override
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (o == null) {
return false;
}
if (!(o instanceof InitialMedicalCheckUpEntity)) {
return false;
}
return this.getEmpId()==o.getEmpId();
}
@Override
public int hashCode() {
return empId;
}
您可能想看看這個問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.