Java 带有Hibernate映射文件的Spring数据JPA

Java 带有Hibernate映射文件的Spring数据JPA,java,spring,hibernate,hibernate-mapping,spring-data-jpa,Java,Spring,Hibernate,Hibernate Mapping,Spring Data Jpa,我想将SpringDataJPA与Hibernate映射文件一起使用,而不使用JPA注释 但我在服务器启动时遇到了这个异常(tomcat): java.lang.IllegalStateException:未从{classpath*:META-INF/persistence.xml}解析任何持久性单元 在org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.acceptaindefaultpersist

我想将SpringDataJPA与Hibernate映射文件一起使用,而不使用JPA注释

但我在服务器启动时遇到了这个异常(tomcat):

java.lang.IllegalStateException:未从{classpath*:META-INF/persistence.xml}解析任何持久性单元
在org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.acceptaindefaultpersistenceunitinfo(DefaultPersistenceUnitManager.java:547)
位于org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.determinePersistenceUnitInfo(LocalContainerEntityManagerFactoryBean.java:311)
位于org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:260)
我的dispatch-servlet.xml如下所示:
是否可以将Hibernate映射文件与ClasspathScanningPersistenceUnitPostProcessor一起使用

我让它和你一起运行

<property name="packagesToScan" value="org.xxxxxxx.server.beans" />

和JPA注释

谢谢你的帮助

简略地 您的问题可能来自您提供的
mappingFileNamePattern
。尝试
**.hbm.xml
而不是
**hbm.xml

完整代码段:

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <!--<property name="persistenceUnitName" value="BLUPP" />-->
    <property name="dataSource" ref="dataSource" />
    <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter" />
    <!-- <property name="packagesToScan" value="org.cleanyourway.server.beans" />-->
    <property name="persistenceUnitPostProcessors">
        <list>
            <bean
class="org.springframework.data.jpa.support.ClasspathScanningPersistenceUnitPostProcessor">
                <constructor-arg name="basePackage" value="org.xxxxxx.server.beans" />
                <property name="mappingFileNamePattern" value="**/*hbm.xml" />
            </bean>
        </list>
    </property>
</bean>
ClasspathScanningPersistenceUnitPostProcessor的小限制
不能在类路径中扫描位于JAR文件根目录下的HBM文件
basePackage
不支持为空,并且不能仅使用

此外,底层的
PathMatchingResourcePatternResolver
在没有根目录(和(其他注释中的第一个警告))的情况下,不能使用带有wilcard的Ant样式路径模式(
*

ClasspathScanningPersistenceUnitPostProcessor的错误
这个类从未使用过Hibernate

在1.4.x之前的版本中,有

对于,似乎有一个新的bug阻止我在JARs中使用HBM。我在第146行得到了一个
NullPointerException
,因为
resource.getURI().getPath()
似乎不适用于协议中有两个:的URI(本例中为jar:file:),并返回
null
路径


(当我找到一个或发布一个bug报告时,我会用一个指向bug报告的链接更新我的答案。)

这是一个很好的描述,谢谢!我对ClasspathScanningPersistenceUnitPostProcessor也很失望
<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <!--<property name="persistenceUnitName" value="BLUPP" />-->
    <property name="dataSource" ref="dataSource" />
    <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter" />
    <!-- <property name="packagesToScan" value="org.cleanyourway.server.beans" />-->
    <property name="persistenceUnitPostProcessors">
        <list>
            <bean
class="org.springframework.data.jpa.support.ClasspathScanningPersistenceUnitPostProcessor">
                <constructor-arg name="basePackage" value="org.xxxxxx.server.beans" />
                <property name="mappingFileNamePattern" value="**/*hbm.xml" />
            </bean>
        </list>
    </property>
</bean>
String path = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
    + basePackage.replace('.', File.separatorChar)
    + File.separator + mappingFileNamePattern;