在开发中遇到一个问题:

简单来说就是hibernate我需要同时更新两个字段,其他字段不更新。用sql语句:

UPDATE PROOF SET PROOF_STATE=4,DEAL_STATE=1 WHERE PROOF_ID='001';

在SQL*PLUS中执行,查看结果,没有问题,两个字段都得到了更新,但是我现在在程序中用的是hibernate,我用hibernate的更新方法:getHibernateTemplate().merge(entity);

对象我设置过:

p = this.proofServiceImpl.findById(new Proof(), this.getRequest().getParameter("pid"));

p.setProofState(4);

p.setDealState(1);

this.proofServiceImpl.update(p);

数据库中只更新了deal_state字段,proof_state字段没有变

数据库中原先是3,0 我现在想改成4,1

但是现在数据是3,1很纠结

我重构了对象:

p0.setClientId(p.getClientId());

p0.setClientRealName(p.getClientRealName());

....后面省略

同样执行测试,结果依旧是3,1

我把hibernate的更新方法换成:getHibernateTemplate().update(entity);结果依旧

我用笨方法:

p.setProofState(4);

this.proofServiceImpl.update(p);

p.setDealState(1);

this.proofServiceImpl.update(p);

结果依旧

我在DAO中添加了一个单独的方法来执行sql语句:

String sql = "update proof set proof_state = 4 , deal_state = 1 where proof_id='"+proof.getProofId()+"'" ;

Query query = getSession().createSQLQuery(sql);

query.executeUpdate() ;

结果依旧

我分开sql语句执行:

String sql1="update proof set proof_states = 4 where proof_id='"+proof.getProofId()+"'";

第二个省略

下面的更新省略,

结果依旧

我在执行后对hibernate手动提交事务:getSession().getTransaction().commit();

结果依旧

等待解决中...............

这个问题已经解决,如果大家遇到这样的问题,就不用再检查你的数据库了,也不用检查你的更新了,更不用检查你底层的东西了,看看你的逻辑吧。