java - 如何将 JaVers 与 Map 一起使用?
问题描述
我有两张地图可以由不同的作者修改。在这个特定的用例中,我有一个限制,我不应该使用 POJO 或域对象,而只能使用 Maps。
@Test
fun `Shadow from a map`() {
val javers = JaversBuilder.javers().build()
val exercise = mutableMapOf("_id" to "1", "title" to "my exercise", "starred" to false)
javers.commit("bob", exercise)
exercise["starred"] = true
javers.commit("bob", exercise)
exercise["title"] = "my great exercise"
exercise["starred"] = true
javers.commit("alice", exercise)
val training = mutableMapOf("_id" to "2", "title" to "my training")
javers.commit("alice", training)
training["title"] = "my great training"
javers.commit("jack", training)
val query: JqlQuery = QueryBuilder.byInstance(exercise).build()
val shadows: List<Shadow<Map<*,*>>> = javers.findShadows(query)
assertThat(shadows.size, `is`(3))
}
测试执行显示以下错误:
MALFORMED_JQL: Invalid JQL query, object passed to byInstance(Object) query should be instance of Entity or ValueObject, got MapType{ baseType: 'class java.util.LinkedHashMap' } - '{_id=1, title=my great exercise, starred=true}'.
Did you mean byInstanceId(Object localId, Class entityClass)?
JaversException MALFORMED_JQL: Invalid JQL query, object passed to byInstance(Object) query should be instance of Entity or ValueObject, got MapType{ baseType: 'class java.util.LinkedHashMap' } - '{_id=1, title=my great exercise, starred=true}'.
Did you mean byInstanceId(Object localId, Class entityClass)?
at org.javers.repository.jql.FilterDefinition$InstanceFilterDefinition.compile(FilterDefinition.java:91)
at org.javers.repository.jql.JqlQuery.compile(JqlQuery.java:129)
at org.javers.repository.jql.QueryCompiler.compile(QueryCompiler.java:19)
at org.javers.repository.jql.ShadowStreamQueryRunner$StreamQuery.<init>(ShadowStreamQueryRunner.java:59)
at org.javers.repository.jql.ShadowStreamQueryRunner.queryForShadowsStream(ShadowStreamQueryRunner.java:34)
at org.javers.repository.jql.QueryRunner.queryForShadowsStream(QueryRunner.java:32)
at org.javers.core.JaversCore.findShadowsAndStream(JaversCore.java:194)
at org.javers.core.JaversCore.findShadows(JaversCore.java:188)
我应该如何构建 JqlQuery 来找到阴影?
解决方案
您可以比较两个顶级地图,但您不能将地图提交到 Javers 存储库(应该抛出异常),因为地图没有标识符。
推荐阅读
- excel - 我如何将此代码转换为更短的代码?可能通过数组?
- javascript - 在 shell exec 期间无法使用 socket.io 发出当前服务器状态
- javascript - 如何从 ids 对象中删除项目
- python - 从 Postgresql 查询大数据集并进行处理
- javascript - JS 开发人员是否应该阅读 ECMAScript 规范?
- javascript - 更改嵌套对象的引用是否正在更改对根对象的引用?
- matplotlib-basemap - 如何使用 python 在伦敦地图上添加散点图
- windows - 在 .Appx 包安装结束时触发脚本 [UWP]
- android - 条纹结帐模式键盘涵盖小型设备上的输入和支付按钮
- python - 如何使用异步函数实现 ThreadPool?