Hibernate 异常总结
2018-06-18 01:11:54来源:未知 阅读 ()
异常一
异常一
异常描述: Sax解析异常:cvc-复杂的类型,发现了以元素maping开头的无效内容,应该是以
‘{“http://www.hibernate.org/xsd/orm/cfg“:property, “http://www.hibernate.org/xsd/orm/cfg“:mapping, “http://www.hibernate.org/xsd/orm/cfg“:class-cache, “http://www.hibernate.org/xsd/orm/cfg“:collection-cache, “http://www.hibernate.org/xsd/orm/cfg“:event, “http://www.hibernate.org/xsd/orm/cfg“:listener}’
几种之一开头。
在使用hibernate框架存取数据的过程中,使用单元测试,后台报错
异常信息: org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException; cvc-complex-type.2.4.a: 发现了以元素 ‘maping’ 开头的无效内容。应以 ‘{“http://www.hibernate.org/xsd/orm/cfg“:property, “http://www.hibernate.org/xsd/orm/cfg“:mapping, “http://www.hibernate.org/xsd/orm/cfg“:class-cache, “http://www.hibernate.org/xsd/orm/cfg“:collection-cache, “http://www.hibernate.org/xsd/orm/cfg“:event, “http://www.hibernate.org/xsd/orm/cfg“:listener}’ 之一开头。]
异常原因: 在hibernate主配置文件中,写入了无效的标签。错误的标签如下:
true
update
解决方案: 将maping改为mapping,问题解决
异常二
异常描述: Spi.服务异常:不能去创建一个被请求的服务
异常信息: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:244) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
异常原因: 经过仔细检查,发现在dao层,没有加载配置文件。
public class Demo { @Test //向数据库中插入Customer对象 public void fun1(){ //1 加载配置 Configuration conf = new Configuration(); //2创建SessionFactory SessionFactory sf = conf.buildSessionFactory(); //3 获得session Session session = sf.openSession(); //4 获得并打开事务 Transaction tx = session.beginTransaction(); //5执行操作 Customer c = new Customer(); c.setCust_name(“哈哈”); session.save(c); //6提交事务,关闭资源 tx.commit(); session.close(); sf.close(); } }
需要在conf中加载configure();
解决方案: 没有加载配置文件,需要加载配置文件。如下:
Configuration conf = new Configuration().configure();
异常三
异常描述: 服务器启动过程中控制台一直提示警告:设置属性 资源到服务器中,hibernate不能发现匹配的属性
发现后台程序不报错,但是数据库表不能创建,数据也不能进行插入
异常信息: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‘source’ to ‘org.eclipse.jst.jee.server:hibernate’ did not find a matching property.
异常原因: 经过仔细检查,发现启动异常,服务器启动后一直警告,说hibernate不能找到匹配属性,原因在于前台的页面中表单的属性的name和数据库中的字段以及实体类中的字段名称不一致,导致前台数据的值不能封装插入到数据库。
解决方案: 修改前台页面表单中的name属性和实体类的name属性以及映射文件中的字段一致。
异常四
异常描述: 映射异常:不能完成对24行10列的解析,cvc-complex-type.2.3: 元素 ‘beans’ 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”
异常信息: Caused by: org.hibernate.boot.MappingException: Unable to perform unmarshalling at line number 24 and column 10. Message: cvc-complex-type.2.3: 元素 ‘class’ 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”。 : origin(ceshi/demo1/Customer.hbm.xml)
异常原因: 在配置文件中ceshi/demo1/Customer.hbm.xml含有特殊字符
解决方案: 要规范,必须有结束。
异常五
异常描述: 属性不能构建异常:无法找到字段和getter方法属性命名(cn.itheima.web.domain.Customer # cust_user_id)
异常信息: org.hibernate.property.access.spi.PropertyAccessBuildingException: Could not locate field nor getter method for property named [cn.itheima.web.domain.Customer#cust_user_id]
异常原因: 映射配置文件中的实体属性名和实体类中属性名不一致
解决方案: 修改映射配置文件属性名,保证名称和实体类中属性名称一致
异常六
异常描述: org.hibernate.exception.sqlgrammarexception:创造模式迁移的数据库信息误差
异常信息: org.hibernate.exception.SQLGrammarException: Error creating DatabaseInformation for schema migration
异常原因: Hibernate核心配置文件中方言写错了
解决方案: 改成
org.hibernate.dialect.MySQLDialect
异常七
异常描述: Hibernate异常:一个错误:字段cust_id没有一个默认值
异常信息: ERROR: Field ‘cust_id’ doesn’t have a default value
org.hibernate.exception.GenericJDBCException: could not execute statement
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
异常原因:在主配置文件(hibernate.cfg.xml)中设置的数据库id的自增长策略单词写错,导致数据库主键id为空
解决方案: 修改正确的主键自增策略,常见的为native,increment
异常八
异常描述: hibernate资源关闭异常:servlet的service服务在路径/hibernate_crm中抛出了一个异常
异常信息: 严重: Servlet.service() for servlet [AddCustomerServlet] in context with path [/Hibernate_crm] threw exception
org.hibernate.ResourceClosedException: org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@e39b6f is closed
at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.errorIfClosed(AbstractLogicalConnectionImplementor.java:38)
异常原因: 在使用hibernate保存对象的过程中,使用了本地线程绑定的session,当事务已经提交,本地线程绑定的session就已经自动关闭,但是该学员在dao层又一次关闭了session,就导致了session资源的重复关闭。
解决方案: 去掉dao层的关闭session的代码,问题可以解决
异常九
异常描述: Hibernate异常:保存是无效的没有一个有效的事务 问题发生在: cn.w.dao.impl.CustomerDaoImpl类中的save方法里,在第16行
的问题是保存用户信息操作,一直不能往数据库保存用户的信息
异常信息: 严重: Servlet.service() for servlet [AddCustomerServlet] in context with path [/Hibernate_crm] threw exception
org.hibernate.HibernateException: save is not valid without active transaction
at org.hibernate.context.internal.ThreadLocalSessionContextTransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:334)atcom.sun.proxy.TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:334)atcom.sun.proxy.Proxy29.save(Unknown Source)
at cn.w.dao.impl.CustomerDaoImpl.save(CustomerDaoImpl.java:16)
at
异常原因: 问题在于service层使用hibernateUtils获得了一个session,但是在dao层保存用户信息的时候又获了了一个当前的session,两个操作的session不一致,导致数据库的数据不能正确插入。
解决方案: Service代码修改如下,获取一个本地session对象:Transaction tx = HibernateUtils.getCurrentSession().beginTransaction();
Dao层也是获取当前的本地session对象:Session session = HibernateUtils.getCurrentSession();//获得Session
只要保证操作数据的两个session一致,数据即可插入
异常十
异常描述: 没有 CurrentSessionContext 的配置
异常信息: org.hibernate.HibernateException: No CurrentSessionContext configured!
org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:695)
at cn.itcast.util.HibernateUtil.getCurrentSession(HibernateUtil.java:29)
at cn.itcast.test.CstCustomerDemo.test1(CstCustomerDemo.java:31)
异常原因: 在执行cn.itcast.util.HibernateUtil类中getCurrentSession方法第29行出现异常,使用配置文件创建CurrentSession出现问题
解决方案: 第一种:使用 openSession() 替换 getCurrentSession()
第二种:修改配置文件,配置文件中绑定当前session的配置应该为:thread
异常十一
异常描述: 空指针异常
异常信息: cn.itcast.text.shuangtest01
demo01(cn.itcast.text.shuangtest01)
java.lang.NullPointerException
at cn.itcast.service.seviceImpl.ICstLinkmanAndCustomerServiceImpl.saveCustomerandCstLinkmen
异常原因: 将对象进行save操作时候出错,因为保存时候需要session,而session获取时出现问题
解决方案: Hibernate.cfg.xml配置文件中:
thread(正确)
thread(错误)
异常十二
异常描述: 初始化session工厂失败!
异常信息: Exception in thread “main” java.lang.ExceptionInInitializerError: 初始化session工厂失败!
at cn.itcast.utils.HibernateUtil.(HibernateUtil.java:22)
异常原因: 加载hibernate.cfg.xml的配置文件创建session工厂时失败,配置文件存在问题
解决方案: 第一个:update只会自动创建表,并不会自动创建数据库,所以需要根据hibernate.cfg.xml配置文件所连接的数据库名先创建数据库
第二个:实体类的hbm.xml配置文件中属性名和实体类的属性名不一致,需将实体类映射配置文件中的属性名和实体类的属性名保持一致
异常十三
异常描述: xml SAX解析异常:在配置文件的第22行,19列 即。该标签包含了子级字符。
异常信息: org.xml.sax.SAXParseException; lineNumber: 22; columnNumber: 19; cvc-complex-type.2.3: 元素 ‘session-factory’ 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”。
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java:458)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3237)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.elementLocallyValidComplexType(XMLSchemaValidator.java:3200)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidat
异常原因: 在hibernate.cfg.xml文件中 看一看字符集,是否有BOM 或
异常十四
异常描述: 该异常为:空指针异常,该异常发生在CustomerListServlet的第25行
异常信息: java.lang.NullPointerException
at cn.itcast.web.Servlet.CustomerListServlet.doGet(CustomerListServlet.java:25)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at
异常原因: 在做查询所有Customer对象,从dao层获取到list list;返回到service层,service层的代码,public List findAllCustomer() {
CustomerDao customerDao = new CustomerDao();
customerDao.findAllCustomer();
return null;
}没有返回List.所以在servlet层获取到list的时候调用方法的时候报空指针异常。
- 1
- 2
- 3
解决方案: 将代码改为:public List findAllCustomer() {
CustomerDao customerDao = new CustomerDao();
return customerDao.findAllCustomer();
}即可。
异常十五
异常描述: 该异常为:hibernate的映射找不到异常,即映射资源找不到。
异常信息: org.hibernate.boot.MappingNotFoundException: Mapping (RESOURCE) not found : domain/Customer.hbm.xml : origin(domain/Customer.hbm.xml)
at org.hibernate.boot.spi.XmlMappingBinderAccess.bind(XmlMappingBinderAccess.java:56)
at org.hibernate.boot.MetadataSources.addResource(MetadataSources.java:274)
at org.hibernate.boot.cfgxml.spi.MappingReference.apply(MappingReference.java:70)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:413)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:692)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
at cn.itcast.utils.HibernateUtils.(HibernateUtils.java:18)
at cn.itcast.CustomerDao.CustomerDao.findAllCustomer(CustomerDao.java:33)
at cn.itcast.CutomerService.CustomerService.findAllCustomer(CustomerService.java:18)
at cn.itcast.web.Servlet.CustomerListServlet.doGet(CustomerListServlet.java:24)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at
异常原因: 在hibernate.cfg.xml中要引入映射文件,即
即找不到映射文件。
解决方案: 修改配置文件的路径.这样就可以加载到
映射配置文件。
异常十六
异常描述: 属性入口创建异常:不能定位字段也不能从name属性中获得get方法
错误在实体类cn.ticast.domain.LinkMan # lkm_cust_id中
异常信息: 严重: Servlet.service() for servlet [AddLinkManServlet] in context with path [/day01_hibernate] threw exception [Servlet execution threw an exception] with root cause
org.hibernate.property.access.spi.PropertyAccessBuildingException:
Could not locate field nor getter method for property named [cn.ticast.domain.LinkMan#lkm_cust_id]at
异常原因: 在创建主外键关联id(lkm_cust_id)的时候把该字段当做普通属性写入了LinkMan类中,并在LinkMan.hbm.xml中映射了该字段,导致后台程序一直报错。
解决方案: 在LinkMan类中去除lkm_cust_id这一属性,并在映射文件中去除这一列( ),问题可以解决
异常十七
异常描述: 服务异常:不能去创建一个被请求的服务
异常信息: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:244)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51) 异常原因: 在进行两张表(customer和linkMan)关联数据的添加过程中,没有在主配置文件(hibernate.cfg.xml)中引入linkMan的xml映射文件,导致服务不能正常运行
解决方案: 在hibernate主配置文件中引入两个实体类的映射文件,问题可以解决
以下的配置都需要及时配置,如果没有及时配置就容易出错
异常十八
异常描述: Hibernate异常:方法DialectResolutionInfo 不能为空,hibernate方言没有设置
异常信息: Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when ‘hibernate.dialect’ not set
异常原因: 没有加载核心配置文件
//创建配置实例对象
Configuration config = new Configuration();
//加载src’目录下的配置文件
config.configure();
解决方案: 加载配置文件
异常十九
异常描述: 属性使用建立异常:不能找到属性名称uid
异常信息: Caused by: org.hibernate.property.access.spi.PropertyAccessBuildingException: Could not locate field nor getter method for property named [cn.itheima.demo1.domain.Demo1#uid]
异常原因: 类名写错 解决方案:
改成uid所属的类名
异常二十
异常描述: Hibernate异常:无法使用jdbc连接
异常信息: Caused by: org.hibernate.HibernateException: Unable to make JDBC Connection [dbc:mysql:///hibernate_day02]
异常原因: 核心配置文件jdbc连接写错 解决方案: 改成jdbc:mysql
异常二十一
异常描述: 数据异常:不能在Hibernate内部执行更新操作
异常信息: org.hibernate.exception.DataException: could not execute statement at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:52) at
…..
Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column ‘lkm_phone’ at row 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2983) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) at
异常原因: 造成的原因是数据截断:lkm_phone字段数据过长。经过仔细查看,发现在数据库见表过程中给lkm_phone这个字段的长度是一个字节,长度太小,导致数据空间不能存储
解决方案: 修改数据库表中该字段的长度,修改成给定字段长度20个字节
异常二十二
异常描述: 类型不匹配异常:为cn.itcast.domain.Customer类提供了一个错误的id匹配类型
异常信息: Servlet.service() for servlet [SaveLinkmanServlet] in context with path [/hibernate_my-crm2] threw exception org.hibernate.
TypeMismatchException: Provided id of the wrong type for class cn.itcast.domain.Customer. Expected: class java.lang.Long, got class java.lang.String at org.hibernate.event.internal.DefaultLoadEventListener.checkIdClass(DefaultLoadEventListener.java:166) at…..
异常原因: 在给customer类设定id字段时没有和其他类以及数据库类型保持一致,应该是给该类有关id类型都是设定为long类型,但是该学员在该类中给其中cust_id设定了String类型,就导致后台程序一致报错
解决方案: 重新修改cust_id类型,修改成Long类型,把后台其余的java类中和与此id匹配相关的类型 都由string修改成Long类型,问题可以解决
异常二十三
异常描述: 栈内存溢出异常:由于使用单元测试,所报的异常无法复制,所有截图,异常名称已经写出。
异常二十四
异常描述: Error during managed flush [object references an unsaved transient instance - save the transient instance before flushing: cn.itcast.entity.LinkMan]
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: cn.itcast.entity.LinkMan
异常原因: 瞬时对象不能直接update或delete ,只有save可以将瞬时变成持久态对象
解决方案: 先用save把瞬时对象变成持久对象
异常二十五
17:07:51,811 ERROR SessionImpl:2994 - HHH000346: Error during managed flush [ids for this class must be manually assigned before calling save(): cn.itcast.entity.LinkMan]
org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): cn.itcast.entity.LinkMan
异常原因: id字段的映射没有设置自增长
解决方案: 增加这句在id映射中
<id name="lkm_id" column="lkm_id">
<!-- 设置数据库表中id的增长策略 主键 自增长 -->
<generator class="native"></generator>
</id>
异常二十六
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '29-17' for key 'PRIMARY'
出现这个异常是因为 多对多表双向关联后 做save操作两边都执行一遍save出现duplicate问题 ,解决方法 多对多映射处使用使用inverse="true"
伴随异常
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: cn.itcast.entity.User
session.save(role1);
session.save(role2);
session.save(role3);
// session.save(user1);
// session.save(user2);
如果user1和user2不进行save操作,那么就是瞬时态,而Hibernate双向关联后保存role就要保存user的,所以要加上级联cascade="save-update",但又会出现Duplicate 错误,所以要至少给一方加上inverse
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Java框架之Hibernate实战篇 2020-06-09
- Java笔记:数组,异常,泛型 2020-06-08
- Spring Cloud Gateway 全局通用异常处理 2020-06-08
- 总结一些 Java 相关笔试、面试题,万一用上了呢 (=_=) -- 基 2020-06-08
- 最新四面京东拿offer回来分享面试经验总结(技术三面+HR面) 2020-06-04
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash