为第三方对象配置JaVers ID

时间:2018-02-19 12:16:24

标签: java javers

我正在尝试使用JaVers来存储我无法更改的第三方库中的对象。对象定义类似于:

interface TheirObject extends WithId{    
  //Other properties here...
}

interface WithId{
  String getId();
}

具有该接口的各种实现。无论如何,ID字段都没有注释。

我尝试使用默认的JaVers配置并收到以下错误:

JaversException MANAGED_CLASS_MAPPING_ERROR: given javaClass 'interface TheirObject' is mapped to ValueObjectType, expected EntityType

所以我按如下方式配置了JaVers:

javers = JaversBuilder.javers()
  .registerEntity(new EntityDefinition(TheirObject.class))
  .build();

哪个例外:

JaversException ENTITY_WITHOUT_ID: Class 'TheirObject' mapped as Entity has no Id property. Use @Id annotation to mark unique and not-null Entity identifier

所以我尝试了解id字段:

javers = JaversBuilder.javers()
  .withMappingStyle(MappingStyle.BEAN)
  .registerEntity(new EntityDefinition(TheirObject.class, "id"))
  .build();

哪个例外:

JaversException PROPERTY_NOT_FOUND: Property 'id' not found in class 'TheirObject'. If the name is correct - check annotations. Properties with @DiffIgnore or @Transient are not visible for JaVers.

我尝试了id的一些不同变体(例如IdgetId),但似乎没有任何效果,我没有发现文档对于如何解决问题非常有用继续。

有人可以帮我正确配置JaVers,以便我可以用它来跟踪这些对象的变化吗?感谢。

更新:我已经更改了上面的界面以更好地反映这个问题,因为我过度简化了我的示例确实可以正常工作的地方。

1 个答案:

答案 0 :(得分:2)

JaversBuilder.javers()
            .registerEntity(new EntityDefinition(TheirObject.class, "id"))        
            .build();