在开发中遇到一个问题:
简单来说就是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();
结果依旧
等待解决中...............
这个问题已经解决,如果大家遇到这样的问题,就不用再检查你的数据库了,也不用检查你的更新了,更不用检查你底层的东西了,看看你的逻辑吧。