Hibernate update(obj)异常 Unexpected row count: 137 expected: 1

alexweb0611 2010-08-05 01:12:05
org.hibernate.HibernateException: Unexpected row count: 137 expected: 1
at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:33)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2268)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2180)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2450)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:91)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:993)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:340)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:490)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:495)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:468)
at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:258)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
at $Proxy48.saveOrUpdate(Unknown Source)
at com.turbo.cinema.film.UpdateTheaterInfoAction.execute(UpdateTheaterInfoAction.java:343)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.turbo.cinema.common.CharsetEncodFilter.doFilter(CharsetEncodFilter.java:85)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:153)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:619)


这个异常是用 hibernate update(obj) 方法报错的, 请问,这个异常是为什么报的!!
...全文
147 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
alexweb0611 2010-08-06
  • 打赏
  • 举报
回复

public void updataTheaterInfo(MTheaterInfo theaterInfo,String oldTheaterCode) throws DatabaseException{
//log.info("enter getTheaterInfoBySimpleName");
Session sion = null;
try{
sion = this.hibernateTemplate.getSessionFactory().openSession();
//List list = sion.createQuery("from MTheaterInfo tInfo where isDelete='0' and pingName=:gId").setString("gId",id).list();
Transaction tr = sion.beginTransaction();
sion.update(theaterInfo);
String theaterCode = theaterInfo.getTheaterCode().trim();
List list = sion.createQuery("from MTheaterHallInfo where theaterCode=:theaterCode").setString("theaterCode",oldTheaterCode).list();
if (list.size() > 0){
for (int i = 0 ; i < list.size();i++){
MTheaterHallInfo hall = (MTheaterHallInfo)list.get(i);
hall.setTheaterCode(theaterCode);
String hallNum = hall.getNumberHall().substring(hall.getNumberHall().trim().length()-2);
hall.setNumberHall(theaterCode.substring(0,10) + hallNum);
sion.update(hall);
}
}
tr.commit();这一处报的异常,update(obj)没报异常
//sion.close();


}catch(Exception ex){
ex.printStackTrace();

}finally{
if (sion != null){
sion.close();
}
}
}


我去查了一下数据库,原因是我在这个表M_TheaterHallInfo中 建立一个触发器,

create trigger m_theaterinfo_piaofangxs on m_theaterinfo
for update
as
if update(piaofangxs)
begin
update m_mantianxing set income=incomesum*i.piaofangxs*(mtx.bili/100) from
m_mantianxing mtx,inserted i,m_theaterinfo mt where mtx.theatercode=mt.theatercode
and mtx.theatercode=i.theatercode and (balancedate is null or balancedate='')
end


现在 我要更新两个表, 提交事物时,就报这个错误,我把触发器删除了,就不会报异常,

是不是更新两个表,inserted 表不知道是哪个? 求高手解答, 上面回答的,都没有入题,
如果没有ID ,异常会是那个异常么?!!!
fei381895649fei 2010-08-06
  • 打赏
  • 举报
回复
你数据库都没有这条记录,你想想可以更新吗?你首先保存一条进去,才可以update
licip 2010-08-05
  • 打赏
  • 举报
回复
在数据库中没有ID的记录是不能update的
licip 2010-08-05
  • 打赏
  • 举报
回复
在数据库中没有ID的记录是不能update的
Resurgam_ 2010-08-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 22cgreen 的回复:]
如果你的object没有save过,就必须要save才行,可以考虑saveOrUpdate(object)
别外要注意一点就是只有持久化对象(PO)才能update,我们直接new 的一个对象不能update的。
一般可以这样:
Query q = session.createQuery("select * from Test where id ='123');
Test obj = (o……
[/Quote]

也不是说new出来的对象(新建状态),不能update, 手动指定主键, 然后再进行update也是可以的,

只是这样不符合常理而已,
22cgreen 2010-08-05
  • 打赏
  • 举报
回复
如果你的object没有save过,就必须要save才行,可以考虑saveOrUpdate(object)
别外要注意一点就是只有持久化对象(PO)才能update,我们直接new 的一个对象不能update的。
一般可以这样:
Query q = session.createQuery("select * from Test where id ='123');
Test obj = (obj)q.list.get(0);
obj.setName("chen");
session.update(obj);
session.flush();
wxx474341237 2010-08-05
  • 打赏
  • 举报
回复
你的obj的Id可能是0,或者是数据库里没有的,因为你update的时候数据库里的数据没找到,就报错了,你调试一下吧,有错就调试啦

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧