问题标签 [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.
javers - MANAGED_CLASS_MAPPING_ERROR 给定的 javaClass 'class java.util.ArrayList' 被映射到 ListType,预期的 ManagedType
我们开始在我们的应用程序中试验 JaVers。我们希望跟踪用户下订单后的更改。因此,这是您的典型订单对象,其中包含主要订单对象、商品、商品选项等。大约有一半的时间运行测试程序,我们收到了这个异常:
130 [main] INFO org.javers.core.JaversBuilder - JaVers 实例已启动并准备就绪 线程“main”中的异常 JaversException:MANAGED_CLASS_MAPPING_ERROR 给定 javaClass 'class java.util.ArrayList' 映射到 ListType,org.javers 中的预期 ManagedType。 core.metamodel.type.TypeMapper.getJaversManagedType(TypeMapper.java:149) 在 org.javers.core.metamodel.type.TypeMapper.getJaversManagedType(TypeMapper.java:132) 在 org.javers.core.metamodel.object.GlobalIdFactory。 createId(GlobalIdFactory.java:39) at org.javers.core.graph.LiveCdoFactory.create(LiveCdoFactory.java:24) at org.javers.core.graph.EdgeBuilder.asCdo(EdgeBuilder.java:39) at org.javers .core.graph.EdgeBuilder.buildSingleEdge(EdgeBuilder.java:32) 在 org.javers.core.graph.ObjectGraphBuilder.buildSingleEdges(ObjectGraphBuilder.java:81)在 org.javers.core.graph.ObjectGraphBuilder.buildEdges(ObjectGraphBuilder.java:71) 在 org.javers.core.graph.ObjectGraphBuilder.buildGraphFromCdo(ObjectGraphBuilder.java:59) 在 org.javers.core.graph.ObjectGraphBuilder .buildGraph(ObjectGraphBuilder.java:48) 在 org.javers.core.graph.LiveGraphFactory.createLiveGraph(LiveGraphFactory.java:39) 在 org.javers.core.diff.DiffFactory.buildGraph(DiffFactory.java:109) 在 org. javers.core.diff.DiffFactory.compare(DiffFactory.java:64) 在 org.javers.core.JaversCore.compare(JaversCore.java:104)48) 在 org.javers.core.diff.DiffFactory.buildGraph(DiffFactory.java:109) 在 org.javers.core.diff.DiffFactory 的 org.javers.core.graph.LiveGraphFactory.createLiveGraph(LiveGraphFactory.java:39) .compare(DiffFactory.java:64) 在 org.javers.core.JaversCore.compare(JaversCore.java:104)48) 在 org.javers.core.diff.DiffFactory.buildGraph(DiffFactory.java:109) 在 org.javers.core.diff.DiffFactory 的 org.javers.core.graph.LiveGraphFactory.createLiveGraph(LiveGraphFactory.java:39) .compare(DiffFactory.java:64) 在 org.javers.core.JaversCore.compare(JaversCore.java:104)
我们只是重新运行程序,最终它就可以工作了。代码基本上是这样的。
javers - 参考变化内的价值变化差异
我有一个应用程序实体和一个用户实体。应用程序与用户之间存在一对多关系,即一个应用程序可以有多个用户。
我更新用户并更改分配给他的应用程序。到目前为止,我有以下内容:
请在调试时找到以下结果:
referenceChanges List:
ReferenceChange{globalId:'com.ds.appmanager.services.domain.User/3', property:'application', oldRef:'com.ds.appmanager.services.domain。 Application/7', newRef:'com.ds.appmanager.services.domain.Application/3'}
oldRef
应用程序 [applicationId=7, applicationName=KYC, applicationDesc=DEV_TEST, applicationLaunch=2016-12-31 00:00:00.0 , live=false]
newRef
Application [applicationId=3, applicationName=KYC, applicationDesc=hellp, applicationLaunch=Sat Mar 12 00:00:00 IST 2016, live=true]
当我将两个对象都传递给 javers.compare(oldRef,newRef) 时,它再次给了我与referenceChanges相同的结果。我认为它应该给我每个属性的值更改,例如 applicationDesc、oldVal = DEV_TEST、newVal = hellp。
我在这里错过了什么吗?我要做的就是获取在 User 对象中引用的 Application 对象的属性值更改。
PS:如果我更改Object oldRef = referenceChange.getLeftObject().get();
为Object oldRef = referenceChange.getLeftObject();
,我会得到JaversException: CLASS_EXTRACTION_ERROR JaVers bootstrap error - Don't know how to extract Class from type 'T'.
更新
刚刚注意到我在进行Diff refDiff = javers.compare(oldRef,newRef);
调试时没有得到 ValueChanges 显示以下更改:
1.NewObject{globalId:'com.ds.appmanager.services.domain.Application/7'}
2.ObjectRemoved{globalId:'com.ds.appmanager.services.domain.User/5'}
3.ObjectRemoved{globalId: 'com.ds.appmanager.services.domain.Application/3'}
4. ObjectRemoved{globalId:'com.ds.appmanager.services.domain.User/6'}
5. ObjectRemoved{globalId:'com.ds.appmanager .services.domain.User/7'}
6. ReferenceChange{globalId:'com.ds.appmanager.services.domain.User/3', property:'application', oldRef:'com.ds.appmanager.services.domain .Application/3', newRef:'com.ds.appmanager.services.domain.Application/7'}
mybatis - Javers and MyBatis integration help needed
I'm having issues trying to get MyBatis and Javers (with Spring) integrated and working. I've followed instructions at http://javers.org/documentation/spring-integration/ and gotten the Aspect setup, and annotated my entity class and registered it with Javers, and the MyBatis interface correctly annotated with @Repository and @JaversAuditable on the appropriate methods, but still haven't gotten it to work, even setting breakpoints in the Javers Aspect, but nothing triggers.
I've also gone about it the other way, using MyBatis plugin interceptor, as per http://www.mybatis.org/mybatis-3/configuration.html#plugins (then used http://www.mybatis.org/spring/xref-test/org/mybatis/spring/ExecutorInterceptor.html as a basic example for commits). However while it's triggering, it's not doing what I expected and is basically just an aspect around on the commit method, which takes a boolean rather than containing which entity(ies) are being commited which would let me pass them to Javers. I suppose I could add an interceptor on the update/insert MyBatis methods, and then stored that in a ThreadLocal or similar so that when commit/rollback was called I could pass it to Javers as necessary, but that's messy.
I've got no clue where to go from here, unless someone can see something I've missed with one of those 2 methods.
javers - Javers 默认忽略而不是默认包含
有没有办法默认忽略除 Javers 中明确包含的所有字段?我正在尝试持久化 CGLib 代理对象,它正在获取所有 CGLib 字段以及 @Entity 字段。所以我认为更好的是默认忽略,以及注释/配置说“使用这些字段”。
我也试过 .withMappingStyle(MappingStyle.BEAN) 似乎没有什么区别。
javers - Javers 正在获取我所有可用的连接
我发现的另一件事是,Javers 似乎正在从我的连接池(通过 Spring DataSourceBuilder 创建)中获取所有可用的连接。我没有使用 Hibernate/JPA,只是通过 JdbcTemplate 直接使用 JDBC,主要是 MyBatis 用于我的实体查询。
我已经为 Javers 的 ConnectionProvider 添加了一个日志记录语句,并且在应用程序开始时,当它查询架构时,它会拉取 4 个连接来检查每个表,然后即使在提交之后也不会返回任何一个来自 PlatformTransactionManager。
我从https://stackoverflow.com/a/35147884/570291了解到,它应该参与与当前事务相同的连接。由于我没有使用 Hibernate/JPA,这是否意味着我需要实现从 MyBatis 到 Javers ConnectionProvider 的连接跟踪/等以返回相同的连接(如果有),然后处理关闭(返回池)交易结束时的连接?
javers - JaVers 可以与 Hibernate 集成吗?
我已经看到您可以使用 JaVers 序列化对数据库的更改,但我找不到关于 Spring 或 Hibernate 集成的好例子。我还想知道是否可以更改生成的表名和列。
感谢!
javers - 当一个字段被声明为 Collection 但被初始化为具体类型时,javers 会抱怨
使用 javers 1.4.1。
我在 POJO 中有一个字段,声明如下:
然后用这样的具体Collection
类的实例进行初始化:
当我对这个类运行测试时,javers 抱怨以下错误:
JaversException: MANAGED_CLASS_MAPPING_ERROR given javaClass 'class java.util.ArrayList is mapped to java.util.ArrayList, expected ManagedType
如果我内联初始化它,同样的错误,比如:
另一方面,如果我将该字段声明为 aList
那么 javers 很高兴:
我是 javers 的新手,它是由其他人介绍给项目的。但是我所做的只是将这个新字段添加到现有的 POJO 中。我需要查看和/或调整什么才能让javers开心?
spring - Spring AOP,@JaversAuditable 在抛出异常时仍在尝试提交更改
这是 Spring 4.1.9.RELEASE、Spring-Data 1.11.4.RELEASE、Javers 1.6.0 和 spring 集成
因此,使用 Spring with @JaversAuditable
,我发现如果在我尝试插入时处理异常(例如重复键异常),JaversTransactionalDecorator
仍然会继续并尝试生成提交。
但是,由于插入失败,我的实体没有 ID,因此 Javers 最终会引发异常(见下文)。逐步调试,我发现我最终org.springframework.aop.aspectjAspectJAfterAdvice.invoke()
进入了 finally 块。然后它invokeAdviceMethod(JoinPointMatch,null,null)
跟注,第三个null
是 a 的位置Throwable
。
根据http://docs.spring.io/spring/docs/4.1.9.RELEASE/spring-framework-reference/html/aop.html,@After
建议将作为最终运行,无论该方法是否正常存在或具有例外。因此,听起来 Javers 需要能够检测是否引发了异常,或者使用不同的 Advice,例如@AfterReturning
,可能使用单独的@AfterThrowing
. 我试图在当前找出@After
Javers ( org.javers.spring.auditable.aspect.JaversAuditableRepositoryAspect.commitAdvice(JoinPoint pjp)
) 如何检测是否已抛出异常/可抛出对象,但我似乎在文档中找不到任何关于此的内容。
那么,这是 Javers 已经拥有的东西,但由于某种原因它没有正确地处理抛出的 SQL 异常,或者在哪里可以找到一些关于在@After
建议中检测到抛出的异常/可抛出异常的信息,以便我可以进入并为此提供修复?
抱歉,可能不太有条理,我在这里比正常时间晚了几个小时。
javers - 如何获取嵌套的 ValueObject 更改?
我有以下类层次结构:
在哪里
我已经编写了以下测试(在常规中):
这个测试的结果是:
试图以这种方式进行更改
返回空列表。
Javers 是否支持在嵌套的 ValueObjects 上选择更改?
javers - 如何在javers中自定义属性名
无论如何我们可以自定义实体的属性名称吗?
有一个注解@TypeName 用于修改类名。
字段是否有任何特定注释?