在Quarkus中仅引入javax.persistence而不配置ORM可行吗?
解决方法
1. 仅引入JPA API依赖
在你的Maven库的pom.xml中,只添加JPA API的依赖,无需引入任何ORM实现(如Hibernate、EclipseLink)。根据JPA版本选择对应依赖:
针对Jakarta Persistence(JPA 3.0+)
<dependency> <groupId>jakarta.persistence</groupId> <artifactId>jakarta.persistence-api</artifactId> <version>3.1.0</version> <scope>compile</scope> </dependency>
针对传统JPA(2.x版本,基于javax)
<dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> <scope>compile</scope> </dependency>
compile范围仅用于让实体类编译通过(需要用到@Entity、@Id等JPA注解),具体ORM实现由依赖你这个库的项目自行引入和配置。
2. 编写标准JPA实体类
在库中编写实体类时,只使用JPA API提供的注解,避免引入任何ORM专属的类或注解:
import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String email; // JPA要求的无参构造器 public User() {} public User(String username, String email) { this.username = username; this.email = email; } // Getter、Setter方法 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
3. 排除意外引入的ORM依赖
如果你的库有其他依赖传递引入了ORM实现,通过<exclusions>标签排除:
<dependency> <groupId>com.example</groupId> <artifactId>some-dependent-lib</artifactId> <version>1.0.0</version> <exclusions> <exclusion> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </exclusion> </exclusions> </dependency>
4. 依赖项目自行处理ORM配置
其他项目引入你的库后,自行添加所需的ORM实现并完成配置。比如Spring Boot项目可以这样做:
添加Hibernate及数据库依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency>
在application.properties中配置JPA
spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.hibernate.ddl-auto=update
这样依赖项目就能正常使用你库中的实体类进行数据访问,而你的库完全不需要参与ORM的实现与配置。
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

