Hibernate jdbc4.MySQLIntegrityConstraintViolationException:Column';emp#U名称';不能为空

Hibernate jdbc4.MySQLIntegrityConstraintViolationException:Column';emp#U名称';不能为空,hibernate,Hibernate,我有一张表tbl\u员工\u工资单 更新函数看起来像 public boolean updatePaySlipData() { SessionFactory sf = NewHibernateUtil.getSessionFactory(); Session s = sf.openSession(); Transaction tx = s.beginTransaction(); s.saveOrUpdate(this);

我有一张表
tbl\u员工\u工资单
更新函数看起来像

  public boolean updatePaySlipData() {

        SessionFactory sf = NewHibernateUtil.getSessionFactory();
        Session s = sf.openSession();

        Transaction tx = s.beginTransaction();

        s.saveOrUpdate(this);
        tx.commit();
          s.close();
        return true;
    }
表中包含
ser(自动递增主键)、emp_名称、工资

我只想更新
SALARY
并编写如下代码

Bean_EmployeeSlip bes=new Bean_EmployeeSlip();

bes.setSerial(ser);

 bes.setEmp_salary(salary);

boolean b= bes.updatePaySlipData();
那么它的错误看起来像

 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 
 Column 'emp_name' cannot be null
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:408)
com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
com.mysql.jdbc.Util.getInstance(Util.java:386)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1040)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2794)
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458)
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375)
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359)
org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:133)
org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:58)
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3224)
org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:3126)
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3456)
org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:140)
org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:377)
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:369)
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:287)
org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:339)
org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52)
org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1234)
org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:404)
org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)
Bean.Bean_EmployeeSlip.updatePaySlipData(Bean_EmployeeSlip.java:157)
org.apache.jsp.Admin.Code.UpdateEmpSalaryCode_jsp._jspService(UpdateEmpSalaryCode_jsp.java:98)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

请帮助我……

如果您已经拥有实体的主键,为什么不简单地执行以下操作:

EmployeeSlip employeeSlip = session.find( EmployeeSlip.class, slipId );
employeeSlip.setSalary( salary );
session.update( employeeSlip );
现在您会注意到,Hibernate将发出一条update语句,该语句不仅设置salary属性,还设置name属性,尽管您没有更改它。这是默认行为。但是,您可以使用
@DynamicUpdate
,这样update语句只包括这种情况下的工资,因为您没有修改名称

确保您的实体类在此处也使用乐观锁定,以避免同一行上多个会话之间的更新冲突,这样,如果其他人同时修改实体,您将获得
OptimisticLockException