您的位置:首页 > 其它

Hibernate学习过程中遇到的几个小问题

2015-10-04 21:02 302 查看
问题1. Microsoft的JDBC驱动程序有一个bug,在运行时会出现下列错误: "【HIbernate】java.lang.AbstractMethodError: com.microsoft.jdbc.base.BaseDatabaseMetaData.supportsGetGeneratedKeys()Z"

解决办法:经搜索CSDN得知是microsoft提供的数据库驱动存在bug。需要换一种驱动连接,使用jtds(下载地址:http://sourceforge.net/projects/jtds/files/)(下载地址2,我的百度云盘
http://pan.baidu.com/s/1gdtZ4AJ )下载jtds1.2版,解压得到jtds-1.2.jar,引用到eclipse中项目目录下(去除原驱动引用),再更改hibernate配置文件:

原驱动连接配置:

<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>

<property name="connection.url">jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=hibernate</property>

更改为使用jtds连接:

<property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>

<property name="connection.url">jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=hibernate</property>

问题得到解决。补充:java代码直接调原jdbc驱动连接数据库是没有问题的,搭配hibernate会有此问题。

问题2.报错信息:Error applying BeanValidation relational constraints错误的解决办法

错误示例:

Exception in thread "main" org.hibernate.HibernateException: Error applying BeanValidation relational constraints

at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyRelationalConstraints(BeanValidationIntegrator.java:219)

at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:126)

at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:303)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750)

at cn.com.zyx.model.StudentTest.main(StudentTest.java:20)

Caused by: java.lang.reflect.InvocationTargetException

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:601)

at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyRelationalConstraints(BeanValidationIntegrator.java:208)

... 4 more

Caused by: org.hibernate.HibernateException: Unable to build the default ValidatorFactory

at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:524)

at org.hibernate.cfg.beanvalidation.TypeSafeActivator.applyDDL(TypeSafeActivator.java:119)

... 9 more

Caused by: javax.validation.ValidationException: Unable to instantiate Configuration.

at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:272)

at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111)

at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:521)

... 10 more

解决办法:

在hibernate.hbm.xml中加上

<property name="javax.persistence.validation.mode">none</property>

说明:javax.persistence.validation.mode默认情况下是auto的,就是说如果不设置的话它是会自动去你的classpath下面找一个bean-validation**包,但是找不到,所以beanvalitionFactory错误.

问题3:Caused by: org.dom4j.DocumentException: http://www.jboss.org/dtd/hibernate/hibernate-mapping-3.0.dtd%20 Nested exception:
http://www.jboss.org/dtd/hibernate/hibernate-mapping-3.0.dtd%20 at org.dom4j.io.SAXReader.read(SAXReader.java:484) at org.hibernate.internal.util.xml.MappingReader.readMappingDocument(MappingReader.java:78)”

解决办法:

这是一个很奇葩的问题,在struts 2.1+srping 3.1+hibernate 4.1环境下用myeclipse 生成的xx.hbm.xml文件中的头部:

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd ">在最后面多了一个空格,把这个空格去除:

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">即能解决此问题!

------------------------------------------------------------------------------------------------

上述问题的解决办法,参考了CSDN上多为前辈的帖子,此处为集中整理,在此谨表谢意! 上述部分问题仅仅针对Hibernate加Mssql数据库引擎时才会出现!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: