Hibernate Envers开启严格JPQL合规时触发StrictJpaComplianceViolation异常
开启JPQL严格合规时使用Hibernate Envers的解决方案
可以在开启hibernate.jpa.compliance.query=true的前提下正常使用Envers,核心是解决Envers查询中使用全限定实体名的问题,具体有以下几种处理方式:
给自定义审计实体指定短名称
在你的CustomRevEntity类上添加@Entity(name = "CustomRev")注解(CustomRev可替换成你偏好的短名称)。Envers生成审计查询时会自动使用这个短名称,而非全限定类名,完全符合JPQL严格合规的要求。这是最直接高效的解决办法。手动调整审计查询的实体引用
如果你不想修改实体注解,也可以在调用AuditReader构建查询时,手动指定短实体名而非全限定类名。不过这种方式需要修改所有相关的审计查询代码,不如注解方式省心。确认版本兼容性
你当前使用的Envers 6.2.6.Final和WildFly 29.0.1.Final的Hibernate内核版本是匹配的,该版本的Envers已经针对JPQL严格合规做了适配,只要配置正确就能正常运行,无需担心版本兼容问题。
补充说明:开启hibernate.jpa.compliance.query=true后,JPQL规范要求必须使用实体的短名称(即@Entity注解name属性指定的名称,未指定时默认是类名),而Envers默认可能会使用全限定类名生成查询,这就是触发异常的原因,通过指定实体短名称就能彻底解决这个冲突。
内容的提问来源于stack exchange,提问作者grigouille
相关产品推荐
相关产品推荐

