Hibernate Envers 6.4.1静态元模型字段注入非法参数问题求助
解决Spring Boot 3.2.1 + Hibernate Envers 6.4.1的HHH015007错误
问题详情
迁移应用至Spring Boot 3.2.1 + Hibernate Envers 6.4.1后,启动日志出现如下错误:
2024-01-03T15:49:10.361+01:00 ERROR 81857 --- [ main] o.h.metamodel.internal.MetadataContext : HHH015007: Illegal argument on static metamodel field injection : org.hibernate.envers.DefaultRevisionEntity_#class_; expected type : org.hibernate.metamodel.model.domain.internal.EntityTypeImpl; encountered type : jakarta.persistence.metamodel.MappedSuperclassType
该问题可通过Spring Data Envers文档示例代码、官方示例项目及Hibernate测试用例复现,且已提交至Hibernate官方Issue追踪。
临时解决办法
- 降级Hibernate Envers版本:暂时回退到Hibernate Envers 6.4.0或Spring Boot 3.2.x默认兼容的更早稳定版本,规避该元模型注入bug。
- 自定义Revision实体:不使用默认的
DefaultRevisionEntity,自行创建继承RevisionEntity的自定义类,确保静态元模型生成时类型匹配。示例代码:import org.hibernate.envers.RevisionEntity; import org.hibernate.envers.RevisionNumber; import org.hibernate.envers.RevisionTimestamp; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; @Entity @RevisionEntity public class CustomRevisionEntity { @Id @GeneratedValue @RevisionNumber private int id; @RevisionTimestamp private long timestamp; // 构造器、getter/setter方法 } - 禁用静态元模型生成(谨慎操作):若项目未依赖JPA静态元模型功能,可通过配置
hibernate.metamodel.generation.enabled=false关闭元模型生成,绕过该错误。
后续处理
等待Hibernate官方发布修复版本,届时升级至对应版本即可彻底解决问题。
内容的提问来源于stack exchange,提问作者zedoo
相关产品推荐
相关产品推荐

