【发布时间】:2018-03-29 23:50:24
【问题描述】:
背景:在“Native Hibernate 使用”场景中使用 Spring + Hibernate 的 WAR 应用程序 (https://docs.jboss.org/author/display/WFLY/JPA+Reference+Guide#JPAReferenceGuide-NativeHibernateuse)
在使用与 WFLY 11 捆绑的 Hibernate 版本(即 5.1.10.Final)时,一切都按预期工作,并在 jboss-deployment-structure.xml 中为 org.hibernate 模块配置以下配置:
<jboss-deployment-structure>
<deployment>
<dependencies>
...
<module name="org.hibernate"/>
...
</dependencies>
<exclude-subsystems>
<subsystem name="jaxrs" />
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>
根据this guide,升级到 Hibernate 5.2.16.Final 时出现问题。据我了解,在模块目录中解压缩hibernate-orm-modules-5.2.16.Final-wildfly-11-dist.zip 后,我应该能够使用插槽 5.2 或 5.2.16.Final 定义 Hibernate 模块,即:
<jboss-deployment-structure>
<deployment>
<dependencies>
...
<module name="org.hibernate" slot="5.2"/>
...
</dependencies>
<exclude-subsystems>
<subsystem name="jaxrs" />
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>
但上面的配置导致
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.hibernate.SessionFactory' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1507)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:815)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:721)
... 32 more
将<module name="org.hibernate" slot="5.2"/> 更改为例如<module name="org.hibernate" slot="5.23456789"/> Wildfly 引发了这样的模块版本不存在的异常,因此我假设模块已正确加载。
我在这个配置中遗漏了什么吗?添加persistence.xml 和<property name="jboss.as.jpa.providerModule" value="org.hibernate:5.2"/> 不适用于这种情况,因为我不使用由Wildfly 管理并注入@PersistenceContext 注释的持久性单元。
【问题讨论】:
标签: wildfly