Javers :"PROPERTY_NOT_FOUND: Property 'id' not found in class" 随机发生

Javers : "PROPERTY_NOT_FOUND: Property 'id' not found in class" happen randomly

我有一个实体 class“ContBox”,其以下字段映射到 JPA 注释和 Javer 注释

@Id
private Long contBoxId;

@Column(name = "box_name")
@PropertyName("box_name")
@DiffInclude
private String boxName;

@Column(name = "box_desc")
@PropertyName("box_desc")
@DiffInclude
private String boxDesc;

当我尝试 运行 javers.compare 时,它遇到了以下错误

org.javers.common.exception.JaversException: PROPERTY_NOT_FOUND: Property 'contBoxId' not found in class 'com.my.test.ContBox_$$_jvst966_b'. If the name is correct - check annotations. Properties with @DiffIgnore or @Transient are not visible for JaVers.
at org.javers.core.metamodel.type.ManagedClass.getProperty(ManagedClass.java:83)
at org.javers.core.metamodel.type.EntityType.spawn(EntityType.java:49)
at org.javers.core.metamodel.type.EntityType.spawn(EntityType.java:36)
at org.javers.core.metamodel.type.TypeFactory.spawnFromPrototype(TypeFactory.java:116)
at org.javers.core.metamodel.type.TypeFactory.infer(TypeFactory.java:74)
at org.javers.core.metamodel.type.TypeMapperState.infer(TypeMapperState.java:157)
at org.javers.core.metamodel.type.TypeMapperState.lambda$getJaversType[=12=](TypeMapperState.java:89)
at org.javers.core.metamodel.type.TypeMapperState.computeIfAbsent(TypeMapperState.java:113)
at org.javers.core.metamodel.type.TypeMapperState.getJaversType(TypeMapperState.java:89)
at org.javers.core.metamodel.type.TypeMapper.getJaversType(TypeMapper.java:129)
at org.javers.core.diff.DiffFactory.buildGraph(DiffFactory.java:94)
at org.javers.core.diff.DiffFactory.compare(DiffFactory.java:54)
at org.javers.core.JaversCore.compare(JaversCore.java:173)

注意:当我第一次创建记录时它永远不会导致错误,它只会在我尝试更新保存的记录并调用 javers.compare.

时随机发生

所以我去调试 javers class 这是我的发现:

错误是由于“propertiesByName”没有“contBoxId”,“propertiesByName”只有那些属性 带有 @DiffInclude 注释。

但这是一个 ID 字段,我不需要比较它(我也尝试为 'contBoxId' 添加 @DiffInclude,它命中 ENTITY_INSTANCE_WITH_NULL_ID)

这只发生在这个实体 class 上,而其他实体 class 在 javers.compare

上工作正常

我已经尽力找到原因,但我真的不知道错误是怎么来的,因为其他实体 class 使用相同的设置但它们都工作正常!!

有没有人对此有任何想法?

我终于找到了根本原因,答案实际上打印在异常消息中:

PROPERTY_NOT_FOUND: Property 'contBoxId' not found in class 'com.my.test.ContBox_$$_jvst966_b'.

com.my.test.ContBox_$$_jvst966_b 是执行保存后的休眠代理对象,在传递给 javers 进行比较之前取消代理后它工作正常变化。