我正在寻找一个在Java中的通用工具,可以帮助我为两个对象(相同类型)创建一个不同的报告。
例如,如果我的类结构是:
class A {
int p1;
string p2;
B b1;
}
class B {
float p3;
}
我想要一个报告b/w两个类型为A的对象(比如a1和a2),如下所示: a1 vs. a2
p1 : 'remove'
p2 : 'change'
b1.p3: 'add'
其中,如果属性在第二对象中为null,则设置“remove”,如果属性存在但具有不同的值,则设置“change”,如果第一对象中
我们目前正在使用JaVers 3.0.0。假设我们有以下两个实体A和B,而A在一个列表中跟踪一些B。
@Entity
@TypeName("A")
public class A {
@Id
private int id;
private List<B> items;
public A() {
items = new ArrayList<>();
}
public A(int id) {
this();
this.id = id;
}
p
我有这样的问题,如果组合的属性是null (注意,它不是ID),Javers会抛出一个异常:
JaversException PROPERTY_ACCESS_ERROR: error getting value from property 'Method User getPersonEntity; //declared in: HibernateProxy_$$_javassist_356' on target object of type 'HibernateProxy_$$_javassist_356', cause: java.lang.reflect.I
我创建了一个CustomPropertyComparator来使用它来比较JAXB创建的对象。因此,在我的例子中,我无法使用框架提供的@DiffIgnore注释。另外,JAXB生成的集合是基于java.util.List而不是java.util.Collection的。不幸的是,我无法让javers使用我的CustomPropertyComparator和List接口。
public class Person {
private String name;
private String ignoreThis;
}
public class Company {
p
如何通过id比较两个包含Entity对象的映射,以及使用JaVers的属性?
我想知道鲍勃从伦敦到巴黎的变化情况如下:
public void compareMaps() {
Javers javers = JaversBuilder.javers().build();
Map<Integer, Person> a = new HashMap<>();
Map<Integer, Person> b = new HashMap<>();
a.put(Integer.valueOf(1), new Person(1,
当我真的很想比较两个对象时,我发现了一个名为Javer的库。这在大多数情况下都做得很好,例如比较对象中的值变化,并且对于列表也很有效。但是,如果有两个包含映射的对象,那么如何捕获更改呢?例如,我有一个有地图的下面的类,
public class Test {
private Map<String,Object> map = new HashMap();
//some others fields
//getters and setters
}
现在,如果我有具有以下值的对象:
Test test1 = new Test();
Map<String,Object
我有一个Java 8/Maven/Spring项目。我正在使用Javer来审计我的应用程序中的更改,但是我创建了一个自定义注释,它放在类的字段上方,如果更改了,我希望对其进行审计。下面是一个示例类:
public class Foo {
@AuditThis
private final String someString;
private final int someInt;
@AuditThis
private final double someDouble;
private final long someLong;
@AuditThis
private fi
我有如下的类层次结构:
class Incident {// Id => Entity
@Id
String id
List<Participant> participants
List<RealEstateProperty> realEstateProperties
}
哪里
class Participant {// No id => by javers terms - ValueObject
EnclosedContact contact
}
class EnclosedContact {// No id => by ja
我使用Javers通过注释相应的com.example.TaskSupplier数据存储库来审核对Spring实体的更改
@JaversSpringDataAuditable
public interface TaskSupplierRepository extends CrudRepository<TaskSupplier, String> {
}
这个实体的主键是一个UUID,所以我可以用以下命令检索实例
select * from task_supplier where id = 'f463d538-ceb0-498b-a20b-2bb65286d200';
上下文
我已经为我的实体使用了@TypeName("Employee"),这样我就可以在DB中丢失完全合格的TypeName。它如预期的那样工作。
问题
当Spring应用程序重新启动,并且有现有的审计日志时,当我按下TYPE_NAME_NOT_FOUND时,我会得到javers.findSnapshots()异常
org.javers.common.exception.JaversException: TYPE_NAME_NOT_FOUND type name 'Employment' not found. If you are using @TypeName
我正在尝试使用Javers审计SortedSet属性,但是当我尝试执行提交时,我总是得到下面的异常。
java.lang.ClassCastException: org.javers.core.metamodel.object.InstanceId cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1188)
at java.util.TreeMap.put(TreeMap.java:531)
at java.util.TreeSet.add(TreeSet.java:255)
at
下面的代码简单地创建了两个对象,两个列表具有相同的对象,并用id标记,只是元素的内容发生了变化。diff对象生成一个diff,而不引用任何父列表元素,而是引用实际的rop。
public class JaversTest {
public static void main(String[] args) {
User u1 = new User();
User u2 = new User();
Email e1 = new Email();
e1.setId("id1");
e
我希望以忽略空属性的方式来比较值对象。
更具体地说,我只想在比较中包括那些在右侧为非空的值对象的属性。例如。
class Person {
String name;
String surname;
}
Person personLeft = new Person();
personLeft.name = "John";
personLeft.surname = "Doe";
Person personRight = new Person();
personRight.name="John"
// this should N
我有两个地图,可以由不同的作者修改。在这个特定的用例中,我有一个限制,不能使用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)
jav