hibernate更新问题

cqcjcc123 2005-07-14 10:52:32
hibernate更新时报的错,请问是什么原因?

Hibernate: select tgwmb0_.C_GWMB_ID as C1_0_, tgwmb0_.C_DEPT_ID as C2_2_0_, tgwmb0_.C_FLAG as C3_2_0_, tgwmb0_.C_BZ as C4_2_0_, tgwmb0_.C_GW_TITLE as C5_2_0_, tgwmb0_.C_DETAIL as C6_2_0_, tgwmb0_.C_GWLC_ID as C7_2_0_ from T_GW_MB tgwmb0_ where tgwmb0_.C_GWMB_ID=?
21:54:40,453 INFO DefaultLoadEventListener:85 - Error performing load command
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.lib.ygt.database.TGwMb#0000000008]
at org.hibernate.ObjectNotFoundException.throwIfNull(ObjectNotFoundException.java:27)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:118)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:75)
at org.hibernate.impl.SessionImpl.immediateLoad(SessionImpl.java:643)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:59)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:84)
at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:134)
at com.lib.ygt.database.TGwMb$$EnhancerByCGLIB$$6ee52d04.setCDeptId(<generated>)
at com.lib.ygt.document.GwMbgl.updateGwMb(GwMbgl.java:156)
at com.lib.ygt.document.GwMbgl.main(GwMbgl.java:177)
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.lib.ygt.database.TGwMb#0000000008]
at org.hibernate.ObjectNotFoundException.throwIfNull(ObjectNotFoundException.java:27)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:118)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:75)
at org.hibernate.impl.SessionImpl.immediateLoad(SessionImpl.java:643)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:59)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:84)
at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:134)
at com.lib.ygt.database.TGwMb$$EnhancerByCGLIB$$6ee52d04.setCDeptId(<generated>)
at com.lib.ygt.document.GwMbgl.updateGwMb(GwMbgl.java:156)
at com.lib.ygt.document.GwMbgl.main(GwMbgl.java:177)
...全文
558 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqcjcc123 2005-07-19
  • 打赏
  • 举报
回复
谢谢各位,已经解决,是数据库字段的问题
fengyun1314 2005-07-19
  • 打赏
  • 举报
回复
我觉得你应该在load出来的那个对象先判断一下是不是为空,如果不是才好更新字段。
你的错误应该是没有找到你要的那个对象,所以当你set属性的时候就出错了,因为你强制
类型转换的时候是空的对象转换!!
aloe617 2005-07-19
  • 打赏
  • 举报
回复
首先,无论数据库中有没有0000000008这条数据,都不会报错。
CGwmbId这个不应该是数据库的字段,是你的配置文件中对应的MAPPING的描述值,还有注意你的CGwmbId类型,你检查一下
liupanjr 2005-07-19
  • 打赏
  • 举报
回复
我以前遇到过相似的问题,一般都是数据库中表字段类型设置出错,我的经验是设置类型一般是vchar型如果你用了其他类型,如long型则要设置初始值,这是因为hibernate将每个字段都映射成po中的一个属性,而在获取属性时如数据库中是null,则对象是不存在,则会报你所提到的错误.
wangw1319 2005-07-15
  • 打赏
  • 举报
回复
这就不清楚了,可能跟你的中文字段名有关吧??只是猜测

我用你的程序测试过
当然我起的table字段名是英文的
这样可以更新数据,如果数据库里有相应的数据的话
cqcjcc123 2005-07-15
  • 打赏
  • 举报
回复
数据库里也没有中文字段
wangw1319 2005-07-14
  • 打赏
  • 举报
回复
给出代码!
cqcjcc123 2005-07-14
  • 打赏
  • 举报
回复
有这个ID,我先查询,再更新就没有问题,这是怎么回事啊
wangw1319 2005-07-14
  • 打赏
  • 举报
回复

可是你这个错误:
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.lib.ygt.database.TGwMb#0000000008]

就是提示不存在C_GWMB_ID = "0000000008"的数据
cqcjcc123 2005-07-14
  • 打赏
  • 举报
回复
有"0000000008"这条数据
wangw1319 2005-07-14
  • 打赏
  • 举报
回复
你的数据库里不存在CGwmbId = "0000000008"的数据
所以没有办法进行更新操作

如果要更新数据,必须要保证数据存在的情况下才能进行更新
cqcjcc123 2005-07-14
  • 打赏
  • 举报
回复
字段没有问题
cqcjcc123 2005-07-14
  • 打赏
  • 举报
回复
public static void updateGwMb(String CGwmbId,String cDeptId, BigDecimal cFlag, String cBz, String cGwTitle)
{
Session session = HibernateUtil.currentSession();
Transaction tc = session.beginTransaction();
try
{

TGwMb tgwmb=(TGwMb)session.load(TGwMb.class,CGwmbId);
tgwmb.setCDeptId(cDeptId);
tgwmb.setCFlag(cFlag);
tgwmb.setCBz(cBz);
tgwmb.setCGwTitle(cGwTitle);
session.update(tgwmb);
tc.commit();
}
catch(Exception e)
{
tc.rollback();
e.printStackTrace();
}
}
yiwg 2005-07-14
  • 打赏
  • 举报
回复
字段对应有问题??
caven 2005-07-14
  • 打赏
  • 举报
回复
你是不是执行了一些操作,查出那条要更新的记录,又session.close(我从不关闭session);又要更新它,就出错了。

67,513

社区成员

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

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