关于Hibernate更新的问题

问题描述

我是刚学的,问一个Hibernate的更新方法的问题getHibernateTemplate().update(entity)可以根据entity的主键来更新一个记录,但是如果想要根据条件更新多条数据呢?应该不是要循环一条条的去更新吧.我看见有个bulkUpdate的方法,参数是一个hql语句,就试了一下我的dao方法是这样的:publicvoiddelGAnswer(ExamGuestAnswerDetailsanswer){Stringhql="updateExamGuestAnswerDetailsgdsetgd.gueIsdelete=0wheregd.examStudentAnswer.usId=?";super.getHibernateTemplate().bulkUpdate(hql,answer.getExamStudentAnswer().getUsId());}但是当执行的时候Hibernate打印执行的的Sql语句却是Hibernate:updateAPTECH_BIRD.dbo.EXAM_GUEST_ANSWER_DETAILS,setGUE_ISDELETE=0whereUS_ID=?2009-01-1204:52:22,625[org.hibernate.util.JDBCExceptionReporter]-[WARN]SQLError:102,SQLState:S00012009-01-1204:52:22,625[org.hibernate.util.JDBCExceptionReporter]-[ERROR]','附近有语法错误。中间多了个逗号,就报错了.这个方法好像不行,希望有人能说一下批量更新的最简便的方法

解决方案

解决方案二:
你的逗号是在哪里多出来的
解决方案三:
APTECH_BIRD.dbo.EXAM_GUEST_ANSWER_DETAILS,这里多的
解决方案四:
那里多出个逗号来sql语句就是错的了,当然会报错你把逗号去掉看看吧
解决方案五:
哎,这个sql是Hibernate给我生成的
解决方案六:
那就通过更改源代码重新生成class文件呗,这样可以解决Bug
解决方案七:
直接执行sql得了。
解决方案八:
hibernate的bug

时间: 2024-09-22 15:43:46

关于Hibernate更新的问题的相关文章

hibernate 更新时遇到的问题

问题描述 hibernate 更新时遇到的问题 在一个事务中,我先find出要更新的对象,在set完新的值之后,在事务提交之前,我用类似于createNativeQuery之类的方法发一条查询语句去查,为什么这个时候事务就提交了呢?是因为数据库的默认隔离级别防脏读吗?有没有高手帮忙解惑下,或者推荐相关的数据让我查阅,谢谢! 解决方案 For JPA native SQL queries, we may need to perform a flush before executing the qu

hibernate更新数据方法小结_JSP编程

复制代码 代码如下: Usertable user=null; Session session=HibernateSessionFactory.getSession(); String sql="from Usertable as user where user.username=?"; Query q=session.createQuery(sql); q.setString(0,username); List l=q.list(); Iterator ite=l.iterator(

请问hibernate更新删除优化问题

问题描述 如果用hibernate自己的update()方法,那么更新时会先查对象,在进行更新,也就是产生两条sql语句,如果我用SQLQUERY执行(updatetablesetx=xwhereid=x)这样的话一句语句就可以搞定,性能上应该有所提高吧?请问是第一种用update()方法好还是第二种自己写sql语句好? 解决方案 解决方案二:用hibernate的吧,你的优化不是很明显,并且也没有事务处理等其他必要的要求.解决方案三:数据库就好比是个"老外";hibernate既是&

Hibernate更新某些字段的几种update方法

Hibernate 中如果直接使用 Session.update(Object o); 会把这个表中的所有字段更新一遍. 比如: view plaincopy to clipboardprint? public class TeacherTest { @Test public void update(){ Session session = HibernateUitl.getSessionFactory().getCurrentSession(); session.beginTransactio

hibernate 更新多条数据如何处理

问题描述 我现在用Hibernate碰到了一个问题.现在在做一个订购服务的程序,有1个会员卡,会员卡可能是企业用户,所以该会员卡对应了多个用户,我在订购服务的时候需要为这个企业用户的会员订购统一的服务,那么就需要为该会员卡上的每个用户添加一条订购服务数据.现在我在service里面的add函数中先查询出该会员卡下的所有用户,然后为每个用户添加相同的服务,调用的是dao的add函数,函数中的代码是getHibernateTemplate().save(o);在service的add函数里面循环调用

HIBERNATE如何直接把瞬時TRANSIENT对象UPDATE成持久化对象

问题描述 因为从表单出来的对象都是瞬时对象,但是UPDATE的时候岂不是还要重新把持久对象LOAD出来再封装值?我用MERGE做提示好像和乐观锁冲突.所以大神帮忙应该怎么做啊 问题补充:也就是他只是通过主键关联,但是不允许同时有两个主键相同的对象在缓存里对么?wangyijiangshui 写道 解决方案 从表单出来的对象虽然是瞬时对象,但是只要你的主键有值,你直接update,Hibernate会自动更新数据库中对应主键的记录的,不用重新手动load出来原数据库的值,然后再封装在保存说到底就是

在Hibernate中处理批量更新和批量删除

批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据.以下程序直接通过Hibernate API批量更新CUSTOMERS表中年龄大于零的所有记录的AGE字段: tx = session.beginTransaction(); Iterator customers=session.find("from Customer c where c.age>0").iterator(); while(customers.hasNext()){ Customer c

Hibernate批量更新与批理删除

批理修改: 场景:如有一个学生表Student,现有一属性[学院]改名,从"计算机学院"改为"计算机工程学院"[不考虑学院表]. 用Hibernate实现这种批理更新的方法一DML(数据操作语言)操作.代码如下: public void updateUser(String newName,String oldName) { Session session = null; try{ session = this.getSession(); Transaction tc

关于Java Hibernate 插入与更新同一张MySQL表不同字段,出现锁没被释放

问题描述 关于Java Hibernate 插入与更新同一张MySQL表不同字段,出现锁没被释放 关于Java Hibernate 插入与更新同一张MySQL表不同字段,出现锁没被释放,这个有可能是数据还没插入完或者插完了锁没有被释放,导致下一个更新操作不能执行,等待超时,这个情况出现在操作数据量大的时候!这个情况有哪几种解决方式? [http-bio-8080-exec-3] [SQLErrorCodesFactory.:126] SQLErrorCodes loaded: [DB2 Derb