gpt4 book ai didi

java - 带有 Hibernate 映射文件的 Spring Data JPA

转载 作者:搜寻专家 更新时间:2023-11-01 02:28:49 25 4
gpt4 key购买 nike

我想将 Spring Data JPA 与 Hibernate 映射文件一起使用,但不使用 JPA-Annotations。

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

java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml}
at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.obtainDefaultPersistenceUnitInfo(DefaultPersistenceUnitManager.java:547)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.determinePersistenceUnitInfo(LocalContainerEntityManagerFactoryBean.java:311)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:260)

My dispatch-servlet.xml looks like the following:
<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 value="org.xxxxxx.server.beans" />
<property name="mappingFileNamePattern" value="**hbm.xml" />
</bean>
</list>
</property>
</bean>

是否可以将 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>

详情

Ant 路径模式

Spring 使用 Ant 路径样式模式。您可以在 Ant Website 上找到有关这些模式的良好文档。双星号通配符表示:在子目录中递归。它后面应该跟一个斜线,因为它代表一个目录。

ClasspathScanningPersistenceUnitPostProcessor

ClasspathScanningPersistenceUnitPostProcessor 的映射文件检测部分考虑了两个参数(basePackage(您的构造函数 args)和 mappingFileNamePattern)。根据建议的更正,Spring 将搜索类路径的子文件夹 org/xxxxxx/server/beans/ 中的所有 **.hbm.xml*。

换句话说,您不能期望您的 mappingFileNamePattern 会被单独解释用于搜索。

以下是完成这项工作的 ClasspathScanningPersistenceUnitPostProcessor 代码片段:

String path = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
+ basePackage.replace('.', File.separatorChar)
+ File.separator + mappingFileNamePattern;

ClasspathScanningPersistenceUnitPostProcessor的小限制

您无法扫描位于类路径中 JAR 文件根目录的 HBM 文件。 basePackage 不支持为空并且不能仅使用 "." 值。

此外,在没有根目录(herehere(第一个警告)在其他注释))。

ClasspathScanningPersistenceUnitPostProcessor 的错误

此类从未使用过 Hibernate。

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

对于 this pull request ,似乎有一个新错误阻止我在 JAR 中使用 HBM 进行整个操作。我在第 146 行遇到了一个 NullPointerException,因为 resource.getURI().getPath(); 似乎不适用于具有两个 的 URI: 在协议(protocol)中(jar:file:/ 在这种情况下)并返回一个 null 路径。

(当我找到错误报告或发布错误报告时,我会使用指向错误报告的链接来更新我的答案。)

关于java - 带有 Hibernate 映射文件的 Spring Data JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14651393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com