星期一 2007年08月06日
学习Hibernate碰到的问题以及解决问题的方法(长期更新)
2007-8-6遇到的问题:
1. Exception in thread "main" org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.zqdu.ec.hibernate.NetManager.id
原因:对应bean中set方法数据类型和hibernate配置文件中定义的类型是否一致。
2.Exception in thread "main" org.hibernate.StaleStateException: Unexpected row count: 0 expected: 1
at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:27)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2204)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2118)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2374)
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:985)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at com.zqdu.ec.hibernate.NetManageOperate.upDate(NetManageOperate.java:45)
at com.zqdu.ec.hibernate.TestM.main(TestM.java:14)
原因是更新的对象在数据就本根中库没有对应的记录,解决办法是检查一下对象的id是否正确,或者在调用upDate(data)中,加入data.set("测试值"),其中测试值必须和数据库中需更新的记录的主键ID一样!用此方法,测试通过,不再抛这个异常。
2007-8-13
1.Exception in thread "main" org.hibernate.HibernateException: No CurrentSessionContext configured!
at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:506)
at com.zqdu.ec.util.HibernateDAO.getSession(HibernateDAO.java:120)
at com.zqdu.ec.util.HibernateDAO.getObject(HibernateDAO.java:91)
at com.zqdu.ec.dao.hibernate.NetPollDAOImpl.findPollById(NetPollDAOImpl.java:36)
at com.zqdu.ec.test.TestPoll.main(TestPoll.java:20)
解决方法:
在hibernate.cfg.xml中加入: