2017-11-27 2 views
0

Im folgenden Code werden einfach zwei Objekte mit zwei Listen mit demselben Objekt erstellt, das mit id gekennzeichnet ist. Nur der Inhalt des Elements wird geändert. Das diff-Objekt erzeugt ein diff ohne Bezug auf das Element übergeordneten Liste, sondern auf die tatsächliche ropZugriff auf Referenz der Liste nicht möglich, wenn sich das enthaltene Element ändert

public class JaversTest { 

     public static void main(String[] args) { 
     User u1 = new User(); 
     User u2 = new User(); 

     Email e1 = new Email(); 
     e1.setId("id1"); 
     e1.setMail("[email protected]"); 

     Email e2 = new Email(); 
     e2.setId("id1"); 
     e2.setMail("[email protected]"); 

     u1.setEmails(Collections.singletonList(e1)); 
     u2.setEmails(Collections.singletonList(e2)); 

     Javers javers = JaversBuilder.javers().build(); 
     Diff diff = javers.compare(e1, e2); 
     System.out.println(diff.prettyPrint()); 
     } 

     @Data 
     public static class User { 
     List<Email> emails = new ArrayList<>(); 
     } 

     @Data 
     public static class Email { 
     @Id 
     String id; 
     String mail; 
     } 
    } 

Der Ausgang i erhalten ist

1. ValueChange{globalId:'com.practo.test.api.diff.JaversTest$Email/id1', property:'mail', oldVal:'[email protected]', newVal:'[email protected]'} 

Antwort

0

Die Javers diff ist vollkommen richtig. Ich bin nicht sicher, was Sie erwarten, aber in Ihrem Ausschnitt haben Sie zwei Versionen eines E-Mail-Objekts erstellt, und dann vergleichen Sie sie. Da das Feld mail geändert wird, erhalten Sie das ValueChange.

Was könnte man sonst von der Diff-Engine bekommen? Ihre E-Mails enthalten keine Verweise auf Benutzer oder Listen. Daher ist javers dies offensichtlich nicht bekannt.

Btw, Ihre Zuordnung ist falsch. E-Mail ist ein typisches Value-Objekt und keine Entität. Versuchen Sie, @Id ann zu entfernen.

+0

Es ist eine Entität in meinem Fall, da es auch eine eindeutige ID haben wird. Auch bezüglich der Anforderung wollte ich nur den Link zurück zum tatsächlichen Link von der Wertänderung wissen. –

Verwandte Themen