hibernate 异常 怎么解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate 异常 怎么解决相关的知识,希望对你有一定的参考价值。

1.Hibernate 常见异常
net.sf.hibernate.MappingException
当出现net.sf.hibernate.MappingException: Error reading resource:…异常时一般是因为映射文
件出现错误。

当出现net.sf.hibernate.MappingException: Resource: … not found是因为XML配置文件没找到所致,有可能是放置目录不正确,或者没将其加入hibernate.cfg.xml中。

2. net.sf.hibernate.PropertyNotFoundException
当出现net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property
name in class …时,原因一般是因为XML映射文件中的属性与对应的Java类中的属性的getter或setter方法不一致。

3. org.hibernate.id.IdentifierGenerationException

当出现org.hibernate.id.IdentifierGenerationException: ids for this class
must be manually assigned before calling
save():异常时,一般是因为<id>元素配置不正确,<id>元素缺少其子元
素<generator></generator>的配置引起。

解决方案:<id>元素映射了相应数据库表的主键字段,对其子元素<generator >,其中class
的取值可以为increment、identity、sequence、hilo、native……等,更多的可参考hibernate参考文档,一般取其值为native 。
参考技术A   hibernate能自动处理RuntimeException,如果是其他的,则要自己进行处理的 参考技术B Hibernate异常及错误处理——汇总

一、super.getHibernateTemplate()execute(HibernateCallback)
错误信息:
The method execute(HibernateCallback<T>) in the type HibernateTemplate is not applicable for the arguments (new HibernateCallback <List<User_Info>>())

发生错误的代码:
@Override public List<User_Info> queryForPage() throws Exception return this.getHibernateTemplate().execute( new HibernateCallback<List<User_Info>>()@SuppressWarnings("unchecked")@Overridepublic List<User_Info> doInHibernate(Session session) throws HibernateException Query query=session.createQuery("from UserInfo"); return query.list(););

原来是包引用错误,引入包的时候一定要小心哦,我是把所有的spring、Hibernate包都添加进工程了,引入的时候一定要注意:
import org.springframework.orm.hibernate3.HibernateCallback;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

看出来了吧,一个时hibernate3一个时hibernate5,版本不一致怎么接受这样的参数。我使用的hibernate版本是4.3.9。所有都改成
import org.springframework.orm.hibernate4.HibernateCallback;import org.springframework.orm.hi本回答被提问者和网友采纳
参考技术C 事务配置的问题;报错信息里面写的很清楚了;
看下你DAO的事务是怎么控制的;贴出代码;
比较合理的实践是在你的SERVICE控制事务;而不是在DAO层;
解决这个问题应该不难。

hibernate配置事务,运用在service层,那么在serviceImpl中的异常要怎么处理?

我在hibernate中用AOP将事务设定到service,然后在调试的时候发现无法回滚,查了下发现在service中捕获了异常,就无法回滚了,那么在service如果出现异常,我应该怎么处理。
出的异常都是普通的运行时异常,问题在于出异常之后,我把异常打印出来的时候,发现数据还是有一部分提交进入了数据库。

参考技术A 异常时候还能进入了数据库,说明你的事务配置文件没有问题。只是你对事务的开启时间和事务回滚机制不太熟悉问题。
如果需求是全部回滚 简单,思想是这样 在你的save方法执行前用service。XX方法开一个事务,让这个事务管理这个方法里的save,这样回滚会是全部效果
在你调用service。XXX方法时候这个XXX方法名匹配上面你那个前缀,潜在要求是 不能是read-only的 必须是REQUIRED的。然后在这个XXX方法里(就是实现类里)进行save,当你程序在XXX方法体里 出了异常 全部回滚
不懂可以追问追问

全部回滚,这个功能是一系列的操作,中途出错就要回滚。

追答

额 你都采纳了跟你问题没什么关系的答案。。。。可以明确的告诉你 跟你事务配置文件没有一点关系,而是你调用servcie 开启事务时机和事务管理范围有关系。

参考技术B 应该是AOP 的配置有问题吧!
一般事务配置不是在service而是在其对于的impl中吧。service本身为接口,你写事务定义也没意义,只有配置在其具体的实现方法中才行吧!
比如像下面这样:

<aop:pointcut id="allManagerMethod" expression="execution(* com.moss.cfc.service.impl.*.*(..))" /> <!-- aop织入点 -->

希望能帮到你!追问


这是我的配置,这样用*匹配应该也可以把

追答

应该可以吧!
你贴下这个AOP 事务的配置完整代码 看看!

追问

saveChangeConfigure这个是serviceImpl中调用的方法名

追答

整体来看,没发现什么问题,就是你贴下 saveChangeConfigure这个完整包名 吗?
serviceImpl 是直接位于 com.ston.pdm.service下还是 com.ston.pdm.service.impl下呢 ?
如果是位于com.ston.pdm.service.impl下 你的这个 "com.ston.pdm.service.*.*(..))"
的配置应该是com.ston.pdm.service.*.*.*(..))"

本回答被提问者采纳

以上是关于hibernate 异常 怎么解决的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate常见异常

Hibernater入门笔记

请说说你对Hibernat的理解?JDBC和Hibernate各有什么优势和劣势?

Hibernate卡住,然后报错java.sql.SQLException: Unknown system variable 'language'异常

请问这是啥错误提示 可以知道具体错误位置吗?

Unknown entity,该怎么解决