Hibernate 常见异常

1.错误异常:

Java代码  

  1. org.hibernate.InstantiationException: No default constructor for entity: com.tks.skyproject.model.ImplementLogAttach  

  2. at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:90)  

  3. at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:106)  

  4. at org.hibernate.tuple.AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.java:344)  

  5. at org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:3272)  

  6. at org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1239)  

  7. at org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1228)  

  8. at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1291)  

  9. at org.hibernate.loader.Loader.getRow(Loader.java:1197)  

 错误分析:构造函数出了问题 到类里一看 默认构造函数被删了
错误解决:到类里写上无参构造方法。

 

为什么要加无参数的构造方法?

原因:当查询的时候返回的实体类是一个对象实例,是hibernate动态通过反射生成的,反射的Class.forName("className").newInstance();需要对应的类提供一个无参构造函数

 

2.错误异常:

Java代码  

  1. org.hibernate.HibernateException: identifier of an instance of com.org.model.MyClass was altered from 7 to 1  

  2.     at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:85)  

  3.     at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:190)  

  4.     at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:147)  

  5.     at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)  

 原因:如果我们从数据库load/get一个对象出来,虽然对它没调用update方法,但是在提交事务时候,hibernate仍要把当前对象和session中对象做比较,一旦修改了该对象某个属性,hibernate会自动执行更新操作的。导致缓存中的id和数据库中的id不一致。所以报错。

在Hibernate中是不允许修改主键的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xp9802

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值