Я пытаюсь сравнить два VO, используя Javers, но, тем не менее, у меня возникают некоторые трудности из-за сравнения полей java.sql.Timestamp
и java.util.Date
показывает, что обнаружены изменения, но на самом деле никаких изменений в полях вообще не было!
Ниже приведен мой сценарий:
@Entity
class A {
@Id private long id;
private SortedSet<B> objB;
public SortedSet<B> getObjB() {
return objB;
}
public void setObjB(SortedSet<B> objB) {
this.objB = objB;
}
}
@Entity
class B implements comparable<B> {
@Id private long id;
private java.util.Date startDate;
private java.util.Date endDate;
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
equals(...) {
...
}
hashCode(...) {
...
}
}
class JaversDateCompareDemo {
public static void main(String[] args) {
B b1= new B();
b1.setStartDate(new java.sql.Timestamp(1559822652957));
b1.setEndDate(new java.sql.Timestamp(1559822652957));
SortedSet<B> s1 = new TreeSet();
s1.add(b1);
B b2 = new B();
b2.setStartDate(1559822652957);
b2.setEndDate(1559822652957);
SortedSet<B> s2 = new TreeSet();
s2.add(b2);
A a1 = new A();
a.setObjB(s1);
A a2 = new A();
a.setObjB(s2);
Javers javers = JaversBuilder.javers().withListCompareAlgorithm(lca).build();
Diff diff = javers.compare(a1, a2);
System.out.println(diff.prettyPrint());
}
}
Вывод:
Diff:
* changes on A/xxx :
- 'objB/xxx.endDate' value changed from '2019-06-06 12:04:12.976' to 'Thu Jun 06 12:04:12 GMT 2019'
- 'objB/xxx.startDate' value changed from '2019-06-06 12:04:12.976' to 'Thu Jun 06 12:04:12 GMT 2019'
Моя кодовая база на самом деле очень велика, и мы хотим иметь стандартный способ сравнения и ведения журнала аудитаизменений и дело в том, что в настоящее время я анализирую поля даты от java.sql.Timestamp
до java.util.Date
вручную, где бы он ни был определен (что очень беспокойно).
Итак
- Я хочу знать, есть ли лучший способ избежать такого рода изменений.
- Предоставляет ли Javers возможность сравнивать 2 даты другого типа (как упомянуто выше).
- Если естьэта функция недоступна в настоящее время с Javers, можно ли добавить эту функцию к нему.Я думаю, что это было бы очень полезно в таких сценариях.
Спасибо.