jpa 多数据源 persistence-unit打包一直报错 javax.annotation.processing.FilerException: Attempt to recreate a fi

本文探讨了在使用多个数据源时,相同实体导致的问题及其解决方案。通过将不同数据源的实体分别放置在不同的包中,并在持久化配置文件中指定各自的子包路径,有效地避免了实体冲突。

参考文档:http://blog.sina.com.cn/s/blog_823ecaee0102v11q.html

参考文档是说不同数据源中有相同的实体会造成这个问题,我本地也是存在着两个数据源有相同的表

后解决方案就是把多数据源的实体按照不同的包进行引入

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="InusrancePU" transaction-type="JTA">
    <jta-data-source>insurance</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <shared-cache-mode>NONE</shared-cache-mode>
    <properties>
        <property name="eclipselink.canonicalmodel.subpackage" value="com.quxing.persistence.entitys"></property>
    </properties>
  
### 问题分析 在项目中遇到无法找到 `javax.persistence:javax.persistence-api:jar:3.1.0` 的依赖问题,主要原因是该依赖可能不存在于指定的 Maven 仓库(如阿里云 Maven 仓库)。以下是详细的解决方案和相关说明。 --- ### 解决方案 #### 1. 检查依赖是否存在 `javax.persistence:javax.persistence-api:3.1.0` 并不是一个官方存在的 Maven 依赖。实际上,JPA 规范的依赖通常是由 `javax.persistence:javax.persistence-api` 提供,但其版本号最高为 `2.2`[^2]。如果需要使用更高版本的 JPA API,应考虑迁移到 Jakarta EE 的相关依赖。 对于 Jakarta Persistence,可以使用以下依赖替代: ```xml <dependency> <groupId>jakarta.persistence</groupId> <artifactId>jakarta.persistence-api</artifactId> <version>3.1.0</version> </dependency> ``` #### 2. 配置正确的 Maven 仓库 如果仍然希望使用 `javax.persistence`,需要确保 Maven 项目配置了正确的仓库地址。默认情况下,Maven 中央仓库已经包含了 `javax.persistence:javax.persistence-api:2.2`。如果需要从阿里云 Maven 仓库下载依赖,可以添加以下配置: ```xml <repositories> <repository> <id>aliyun</id> <url>https://maven.aliyun.com/repository/public</url> </repository> </repositories> ``` #### 3. 替换为兼容的依赖 如果项目中确实需要 JPA 相关功能,建议使用 Spring Boot 提供的自动配置功能,并通过 `spring-boot-starter-data-jpa` 引入依赖。该 Starter 已经集成了必要的 JPA 和数据库驱动依赖[^4]。 示例配置如下: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` #### 4. 迁移到 Jakarta EE 如果项目计划长期维护或升级到最新技术栈,建议迁移到 Jakarta EE 的相关规范。Jakarta PersistenceJPA 的后续版本,支持更高的版本号(如 `3.1.0`)。迁移步骤包括: - 将所有 `javax.*` 包名替换为 `jakarta.*`。 - 更新相关依赖至 Jakarta EE 版本。 --- ### 示例代码 以下是一个完整的 Maven 配置示例,展示了如何正确引入 JPA 或 Jakarta Persistence 依赖: ```xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <dependencies> <!-- 使用 Jakarta Persistence (推荐) --> <dependency> <groupId>jakarta.persistence</groupId> <artifactId>jakarta.persistence-api</artifactId> <version>3.1.0</version> </dependency> <!-- 或者使用 JPA (兼容旧项目) --> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> </dependency> <!-- Spring Boot 数据访问支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> </dependencies> <repositories> <repository> <id>aliyun</id> <url>https://maven.aliyun.com/repository/public</url> </repository> </repositories> </project> ``` --- ### 注意事项 - 如果项目中同时存在 `javax.servlet-api` 和 `servlet-api` 依赖,需注意版本冲突问题[^3]。建议统一使用 `javax.servlet-api` 并设置版本为 `3.1.0` 或更高。 - 在迁移过程中,确保所有第三方库也已更新至支持 Jakarta EE 的版本。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值