Error creating bean with name 'sessionFactory' defined in file

在hibernate和spring整合时,出现错误如下:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in file [G:\workspace\s_hibernate\src\applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Error applying BeanValidation relational constraints
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84)
at org.test.Test.main(Test.java:16)
Caused by: 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:306)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1744)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1782)
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:189)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:350)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:335)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
... 12 more
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:606)
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyRelationalConstraints(BeanValidationIntegrator.java:208)
... 21 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)
... 26 more
Caused by: javax.validation.ValidationException: Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.
at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:271)
at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:110)
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:521)
... 27 more


经过一番查找,终于解决了这个错误,原因出现在applicationContext.xml配置中:

<beanid="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <propertyname="dataSource"ref="dataSource" />
 <propertyname="hibernateProperties">
   <props>
        <prop key="hibernate.show_sql">true</prop>
       <prop key="hibernate.format_sql">true</prop>
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
       <prop key="javax.persistence.validation.mode">none</prop>   
 </props>
  </property>
  <propertyname="packagesToScan"value="com.bolo.examples.entity.*"/>
 </bean>


 <prop key="javax.persistence.validation.mode">none</prop>   

加入粗体加下划线部分就没有问题了

真是不同的版本差异比较大啊

其实这个问题是我们自己造成的!为什么这么说?因为我们在配置spring和Hibernate进行结合的时候版本出现了问题。

<persistence...> 
  <persistence-unit...>
   ...
   <properties>
    <property name="javax.persistence.validation.mode"
               value="callback,ddl"/>
   </properties>
 </persistence-unit>
</persistence>


这是hibernate官方文档的一段话!

意思就是在hibernate.cfg.xml或者是

persistence.xml文件下面需要配置

javax.persistence.validation.mode属性!

特别的!在Hibernate中默认的

<propkey="javax.persistence.validation.mode">none</prop>

是auto而不是none!

 

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

 

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

由于javax.persistence.validation.mode的属性值默认是auto,所以会出错。

 

在hibernate.cfg.xml里将javax.persistence.validation.mode设置为none,就可以避免出错了。

 

  <!-- Disable the BeanValidation-->

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

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

 

 

所以,Hibernate3.6以上版本在用junit测试时会提示错误:

 

Unable to get thedefault Bean Validationfactory

 

 

 

在hibernate.cfg.xml里增加一属性解决:   

 

 

 

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



引用中的代码片段是一个在Java中使用HashMap和BeanUtils.populate()方法填充一个自定义对象的示例。引用中的代码片段是一个在Java中使用TransformerFactory和Transformer类进行XML转换的示例,并通过启用安全处理模式来阻止对Java类的潜在引用。引用中的代码片段是一个使用注解来定义属性和组件的示例,该示例是基于Apache Tapestry框架的。 关于您提到的错误:"Error creating bean with name &#39;sessionFactory-his&#39; defined in class path resource",根据提供的引用内容无法直接判断问题的原因。这个错误通常是由Spring框架在创建bean时出现的问题,可能是由于配置文件的错误、依赖项的问题或其他原因导致的。要解决这个错误,您可以尝试以下几个步骤: 1. 检查配置文件:确保配置文件中定义的bean名称和类路径资源的位置是正确的,并且没有语法错误或拼写错误。 2. 检查依赖项:确保所有必需的依赖项都已正确配置和引入。如果您使用的是Maven或Gradle等构建工具,可以尝试重新构建项目以解决依赖关系的问题。 3. 检查Spring配置:确保您的Spring配置文件正确配置了bean的相关属性和依赖项。您可以查看日志文件或调试信息以获取更多关于错误原因的详细信息。 4. 检查类路径资源:如果错误指向了一个类路径资源,您可以检查该资源是否存在,并且您有适当的权限来访问它。 请注意,具体的解决方法可能因为您的具体情况而有所不同。如果您能提供更多关于错误消息的详细信息,我可以给出更具体的建议。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java代码审计手册(English)](https://blog.csdn.net/fastergohome/article/details/102554609)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值