搭建JavaFX-Hibernate-Hibernate Search测试应用遇权限错误求助
修复 "This library does not have private access to interface org.hibernate.internal.CoreMessageLogger" 错误
你的问题核心是Hibernate Search与Hibernate ORM版本不兼容,加上模块配置缺失必要权限导致的,以下是具体修复步骤:
1. 调整依赖版本,确保兼容性
Hibernate Search 7.2.3.Final 对应的兼容Hibernate ORM版本是 6.4.x,你当前用的6.6.11.Final版本过高,会引发内部API访问冲突。修改pom.xml:
<!-- 移除单独的hibernate-core依赖,由hibernate-search-mapper-orm自动引入兼容版本 --> <dependency> <groupId>org.hibernate.search</groupId> <artifactId>hibernate-search-backend-lucene</artifactId> <version>7.2.3.Final</version> </dependency> <dependency> <groupId>org.hibernate.search</groupId> <artifactId>hibernate-search-mapper-orm</artifactId> <version>7.2.3.Final</version> </dependency> <!-- 移除手动添加的jboss-logging,让依赖管理自动引入适配版本 -->
如果需要显式指定Hibernate ORM版本,添加以下依赖(确保版本为6.4.x,比如6.4.4.Final):
<dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-core</artifactId> <version>6.4.4.Final</version> </dependency>
2. 完善模块配置(module-info.java)
Hibernate Search需要访问实体类的内部字段,同时需要模块声明依赖Search的ORM映射器模块:
module com.example.hibernate { requires javafx.controls; requires javafx.fxml; requires java.naming; requires jakarta.persistence; requires org.hibernate.orm.core; // 新增:声明依赖Hibernate Search的ORM映射器模块 requires org.hibernate.search.mapper.orm; requires org.hibernate.search.mapper.pojo; opens com.example.hibernate to javafx.fxml; exports com.example.hibernate; exports com.example.hibernate.model; exports com.example.hibernate.service; exports com.example.hibernate.util; // 新增:让Hibernate Search能反射访问实体类 opens com.example.hibernate.model to org.hibernate.orm.core, org.hibernate.search.mapper.orm; opens com.example.hibernate.service to javafx.fxml; }
3. 验证配置一致性
确保hibernate.cfg.xml中的Search配置正确,你的当前配置没问题,但可以补充必要的后端类型配置(可选,默认是lucene):
<property name="hibernate.search.backend.type">lucene</property> <property name="hibernate.search.backend.directory.root">./index</property>
完成以上调整后,重新编译运行应用,错误应该会消失。
内容的提问来源于stack exchange,提问作者Jko
相关产品推荐
相关产品推荐

