Hibernate使用jar-file属性时报No query defined for that name错误
解决方案
按优先级依次尝试以下配置修改:
- 补充
exclude-unlisted-classes配置
JTA 类型的持久化单元在容器环境下默认会启用类过滤逻辑,仅扫描当前persistence.xml所在归档内的实体类,不会自动扫描<jar-file>指定的外部 jar。需要在<persistence-unit>标签内、<properties>标签前显式关闭该配置:<exclude-unlisted-classes>false</exclude-unlisted-classes> - 适配JBoss VFS协议替换扫描器
JBoss 内置的VFS虚拟文件协议会导致Hibernate默认扫描器无法正确解析jar包内的类文件,需要在<properties>中显式指定JBoss专用的扫描器实现:<property name="hibernate.archive.scanner" value="org.hibernate.jpa.boot.archive.internal.JBossArchiveScannerImpl"/> - 清理依赖jar的冗余持久化配置
检查firstJar.jar和secondJar.jar的META-INF目录下是否存在独立的persistence.xml文件,如果存在会被容器识别为独立持久化单元,导致当前PU不会扫描其内部的实体类,删除依赖jar中冗余的persistence.xml即可。 - 移除冲突的事务配置
当前配置同时存在旧版本Hibernate专用的hibernate.transaction.manager_lookup_class和JPA 2标准的hibernate.transactionJtaPlatform,二者功能重叠可能导致初始化逻辑异常,删除旧的hibernate.transaction.manager_lookup_class配置项即可。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

