各位大虾们,帮帮忙server端用servlet接受请求,然后用Hibernate对数据进行处理。有时候在执行下面的方法时打印出了两条sql语句,public boolean isServiceAvailableAccordingPhoneNo(String phoneNo) {
Transaction tx = null;
try {
sf = SessionFactoryUtil.getSessionFactory();
Session session = sf.getCurrentSession();
tx = session.beginTransaction();
Query query = session.createQuery("select u.cxService from UserInfo u where u.phoneNo = ?");
query.setParameter(0, phoneNo);
List list = query.list();
session.getTransaction().commit();
if (list != null && list.size() > 0
&& ((Integer) (list.get(0)) != 0)) {
return true;
}
} catch (Exception e) {
tx.rollback();
}
return false;
}
Hibernate: select userinfo0_.cxService as col_0_0_ from UserInfo userinfo0_ where userinfo0_.phoneNo=?
Hibernate: update CXInfo set tEnd=?, imageId=?, imei=?, modeType=?, phoneNo=?, signature=?, tStrat=?, timeStamp=?, userInfoId=? where id=?
不知道在使用Hibernate的时候哪边没有注意??不知道是不是因为并发的问题??

解决方案 »

  1.   

    你的类UserInfo中的set方法或get方法,有可能导致中间的变量发生变化的处理逻辑。
    如:get方法这样写
    {
    if(x==null)
    x=不为null的值。
    }
    在这种情况下,当取出来之后,hibernate即会识别到这个对象的值会发生变化,而会将新信息更新到数据库当中。这就是多出的update的由来。
      

  2.   

    你前面执行了个updata方法没提交吧
    select这种语句一般不需要加入事务
      

  3.   

    谢谢大家,在做这边之前的update的方法没有提交。OK了