问题标签 [javers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
176 浏览

javers - 从序列化数据中检索受影响的对象

我正在努力寻找两个 Json 对象之间的差异,并以 Json 格式(使用 Javers)存储各自的差异,以便以后可以检索并以有意义的方式呈现给用户。现在,挑战是,受影响的对象(发生变化的地方)在序列化期间没有被序列化。我了解无法从 Diff 检索域对象。可以看到“affectedCdo”已被标记为瞬态不允许序列化它。这样做的任何其他选择?

谢谢,拉维。

0 投票
3 回答
1238 浏览

java - 如果数据库已在使用中,如何使用当前状态初始化 Javers jv_snapshot?

我有一个已经填充的 SQL 数据库,我想在其中添加 Javers 审计。jv_snapshot在对特定对象运行初始更新之前,有没有办法用对象的当前状态初始化表?我发现我正在丢失以前的状态,因为jv_snapshot表包含更新状态作为初始状态。我正在使用 hibernate/jpa 运行一个 spring boot 应用程序。

0 投票
1 回答
125 浏览

auditing - ObjectRemoved (JaVers) 类型的变化是什么意思?

JaVers 用户,

我试图了解 JaVers 比较的基础知识,但无法弄清楚!

我创建了一个非常基本的 MyObject 类,如下所示:

我创建了两个 MyObject 之类的:

接下来我做一个:

输出如下所示:

我的问题是这个输出中 ObjectRemoved 的确切含义是什么?无法找到任何有关此的文档,抱歉!

问候,杰拉德

0 投票
1 回答
81 浏览

javers - 为什么初始提交未显示在更改日志中

我想知道为什么新对象的初始提交不是可见的更改列表?

例如,当我有:

我在控制台上看到以下 INFO 行:

但是 changeLog 打印是空的!为什么?

问候,杰拉德

0 投票
1 回答
1247 浏览

java - 使用 Javers 比较包含地图的对象

当我真的想轻松比较两个对象时,我找到了一个名为 Javers 的库。这在大多数情况下都做得很好,例如比较对象中的值变化,也适用于列表。但是,如果一个有两个包含地图的对象,那么如何捕获更改?例如,我有一个带有地图的以下课程,

现在,如果我有以下值的对象:

这并没有给我在地图中所做的更改。我将如何捕捉它?

0 投票
2 回答
2579 浏览

java - java.lang.IllegalStateException:未找到线程绑定请求 + @JaversSpringDataAuditable

java.lang.IllegalStateException: No thread-bound request found当我在我的 JPA 存储库类中使用 Javers 审计功能时,我得到了。

我的服务方法(创建/更新)@Async使用Future.

我在这里错过了什么吗?

java.util.concurrent.ExecutionException:java.lang.IllegalStateException:未找到线程绑定请求:您是指实际Web请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上是在 Web 请求中操作并且仍然收到此消息,则您的代码可能在 DispatcherServlet/DispatcherPortlet 之外运行:在这种情况下,请使用 RequestContextListener 或 RequestContextFilter 来公开当前请求。在 java.util.concurrent.FutureTask.report(未知来源)~[na:1.8.0_112] 在 java.util.concurrent.FutureTask.get(未知来源)~[na:1.8.0_112]

原因:java.lang.IllegalStateException:未找到线程绑定请求:您是指实际 Web 请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上是在 Web 请求中操作并且仍然收到此消息,则您的代码可能在 DispatcherServlet/DispatcherPortlet 之外运行:在这种情况下,请使用 RequestContextListener 或 RequestContextFilter 来公开当前 request.at

org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:131) ~[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE] at org.springframework.web.context.support .WebApplicationContextUtils.currentRequestAttributes(WebApplicationContextUtils.java:275) ~[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE] at org.springframework.web.context.support.WebApplicationContextUtils.access$400(WebApplicationContextUtils.java :64) ~[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE] at org.springframework.web.context.support.WebApplicationContextUtils$RequestObjectFactory.getObject(WebApplicationContextUtils.java:291) ~[spring- web-4.1.9.RELEASE.jar:4.1.9.RELEASE] 在 org.springframework.web.context.support.WebApplicationContextUtils$RequestObjectFactory。getObject(WebApplicationContextUtils.java:286) ~[spring-web-4.1.9.RELEASE.jar:4.1.9.RELEASE] at org.springframework.beans.factory.support.AutowireUtils$ObjectFactoryDe​​legatingInvocationHandler.invoke(AutowireUtils.java:307 ) ~[spring-beans-4.1.9.RELEASE.jar:4.1.9.RELEASE] at com.sun.proxy.$Proxy146.getHeader(Unknown Source) ~[na:na] at com.vz.uiam.common .audit.javers.ServletRequestAuthorProvider.provide(ServletRequestAuthorProvider.java:15) ~[uiam_common_cloud-1.0.11.jar:1.0.11] at org.javers.spring.auditable.aspect.OnSaveAuditChangeHandler.handle(OnSaveAuditChangeHandler.java:17) ~[javers-spring-1.6.4.jar:na] 在 org.javers.spring.auditable.aspect.JaversAuditableRepositoryAspect.applyVersionChange(JaversAuditableRepositoryAspect.java:94) ~[javers-spring-1.6.4.jar:na] 在 org.javers.spring.auditable.aspect.JaversAuditableRepositoryAspect.applyVersionChanges(JaversAuditableRepositoryAspect.java:89) ~[javers-spring-1.6.4.jar:na] 在 org.javers.spring.auditable.aspect.JaversAuditableRepositoryAspect。 onVersionEvent(JaversAuditableRepositoryAspect.java:71) ~[javers-spring-1.6.4.jar:na] at org.javers.spring.auditable.aspect.JaversAuditableRepositoryAspect.onSaveExecuted(JaversAuditableRepositoryAspect.java:59) ~[javers-spring-1.6 .4.jar:na] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_112] 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_112] 在 sun。 reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_112] at java.lang.reflect.Method。调用(未知来源)~[na:1.8.0_112] at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)[spring-aop-4.1.9.RELEASE.jar:4.1.9.RELEASE ] 在 org.springframework.aop.aspectj.AspectJAfterReturningAdvice 的 org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:603) [spring-aop-4.1.9.RELEASE.jar:4.1.9.RELEASE]。 afterReturning(AspectJAfterReturningAdvice.java:61) ~[spring-aop-4.1.9.RELEASE.jar:4.1.9.RELEASE] at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:53) ~ [spring-aop-4.1.9.RELEASE.jar:4.1.9.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168) [spring-aop-4.1.9.RELEASE.jar:4.1.9.RELEASE] 在 org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85) [spring-aop-4.1.9 .RELEASE.jar:4.1.9.RELEASE] 在 com.vz.uiam.common.audit.aspect.JPAIdFieldNullifyAspect.monitor(JPAIdFieldNullifyAspect.java:55) ~[uiam_common_cloud-1.0.11.jar:1.0.11] 在太阳.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_112] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_112] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_112] at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_112] at org.springframework.aop.aspectj.AbstractAspectJAdvice。invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621) [spring-aop-4.1.9.RELEASE.jar:4.1.9.RELEASE] at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610) [spring-aop -4.1.9.RELEASE.jar:4.1.9.RELEASE] 在 org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:68) [spring-aop-4.1.9.RELEASE.jar:4.1.9 .RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168) [spring-aop-4.1.9.RELEASE.jar:4.1.9.RELEASE] 在 org.springframework.aop.interceptor。 ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) [spring-aop-4.1.9.RELEASE.jar:4.1.9.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation。进行(ReflectiveMethodInvocation.java:179)[spring-aop-4.1.9.RELEASE.jar:4.1.9.RELEASE] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)~[spring- aop-4.1.9.RELEASE.jar:4.1.9.RELEASE] 在 com.sun.proxy.$Proxy149.save(未知来源)~[na:na]

0 投票
1 回答
489 浏览

java - Javers:恢复以前版本的bean

是否可以“签出”对象的特定提交或版本/快照?我的意思是:我对我的 bean 进行了一些更改,然后通过 Javers 实用程序提交了对象,但我想签出以前的版本,因为实际版本已损坏或不正确。是否有 Javers 实用程序可以“恢复”以前的数据?或者我是否必须恢复恢复单个更改的对象?

0 投票
3 回答
680 浏览

java - JaVers:没有 Spring 的 Hibernate 集成

我目前正在开发一个项目,我们需要跟踪模型对象的更改。我们想为此使用 JaVers,因为它似乎正是我们需要的。但是,出于某种原因,客户端禁止使用 Spring。是否可以在没有 Spring 库的情况下将 JaVers 和 Hibernate 集成在一起?

谢谢

编辑:实际上,该项目使用 JPA 2 进行持久性,使用 Hibernate 实现(JBOSS 服务器)

0 投票
1 回答
2285 浏览

java - JaVers 未检测到集合内对象属性的更改

我想使用 JaVers 来跟踪我的 Java 对象的更改。基本示例运行良好,但我无法检测存储在集合中的对象的更改。

如果我扩展ChangeLogExample.class示例以更改例如其中一个下级:

这是打印的更改日志:

因此,对第一个下属的年龄的更改不会显示在更改日志中。

使用withChildValueObjects()并没有什么不同。

当我分别将更改提交给 Employee 实例时,我得到了对受训者年龄的更改,但这不是我所期望的(也不是我想要的)。

所以我的问题是:如何在 ChangeLog 中显示对年龄的更改?


我正在使用 JaVers 3.2.0

该类Employee与 JaVers 示例相同:https ://github.com/javers/javers/tree/master/javers-core/src/test/java/org/javers/core/examples/model

main()方法只是来自https://github.com/javers/javers/blob/master/javers-core/src/test/java/org/javers/core/examples/ChangeLogExample.java的测试

0 投票
1 回答
1168 浏览

java - Javers 没有为集合内对象属性的更改创建快照

我正在评估 javers 以将其用于审计实体。我有一个带有 ValueObjects 嵌套集合的实体。我希望 valueobject 上的每个属性更改都会生成 Entity 的快照。仅当将 valueobject 添加到集合中时才会创建快照。在我的情况下,我向集合中添加了两个 valueobjects创建了实体的两个快照。第三次我只是更改了值对象的属性,而 javers 并没有将其识别为实体的更改,而是为内部值对象创建了快照。

我的问题是我的假设是否有效,或者跟踪集合中值对象的更改的最佳方法是什么

下面是我使用 spring boot 创建的一个简单测试的代码。

我正在使用 javers 3.2.0 版

我的实体如下

值对象如下

我的弹簧数据存储库如下

下面是我创建的一个 spock 集成测试,用于验证对集合内对象属性的更改会创建一个新快照。

并且测试失败并出现以下错误

不满足条件:

快照.size() == 6 | | | | 5 false [Snapshot{commit:3.0, id:User/John#hobbies/1, version:2, (hobby:Watching Soccer)}, Snapshot{commit:2.0, id:User/John#hobbies/1, version:1 , (active:true, hobby:Watching Soccer)}, Snapshot{commit:2.0, id:User/John, version:2, (hobbies:[User/John#hobbies/0, User/John#hobbies/1], name:John)}, Snapshot{commit:1.0, id:User/John#hobbies/0, version:1, (active:true, hobby:Reading books)}, Snapshot{commit:1.0, id:User/John,版本:1,(爱好:[用户/John#hobbies/0],姓名:John)}]

预期:6

实际:5