Wie kann ich sicherstellen, dass CassandraOperations.selectOneById () alle Felder im POJO initialisiert?

Ich verwende Spring Data Cassandra 1.3.4.RELEASE, um Instanzen einer Klasse, die ich habe, beizubehalten. Die Klasse ist in Groovy geschrieben, aber ich denke nicht, dass das wirklich wichtig ist. Ich habe ein CrudRepository implementiert und füge der Repo-Implementierungsklasse eine Instanz von CassandraOperations hinzu. Ich kann die meisten anderen Vorgänge erfolgreich einfügen, löschen und ausführen. Es gibt jedoch ein Szenario, in dem mein Testfall unterbrochen wird. Meine Entitätsklasse sieht ungefähr so aus:

@Table("foo")
class FooData {
  @PrimaryKey("id")
  long id
  @Column("created")
  long updated
  @Column("name")
  String name
  @Column("user_data")
  String userData
  @Column("numbers")
  List numberList = []
}

In meinem Testfall habe ich vor dem Aufrufen von CassandraOperations.insert (entity) nur einige Felder wie 'id' und 'updated' festgelegt, sodass die meisten zum Zeitpunkt des Einfügens in der Entity-Instanz null waren. Das numberList-Feld war jedoch nicht null, sondern eine leere Liste. Direkt nach dem insert () rufe ich CassandraOperations.selectOneById (FooData.class, id) auf. Ich erhalte eine FooData-Instanz zurück und die Felder, die beim Speichern initialisiert wurden, werden mit Daten gefüllt. Ich habe jedoch die Gleichheit der Inhalte in meinem Test überprüft und es ist fehlgeschlagen, da die leere Liste nicht als leere Liste im POJO zurückgegeben wurde, das von CassandraOperations.selectOneById () zurückgegeben wurde. Es ist eigentlich null. Ich gehe davon aus, dass dies eine Art Cassandra-Optimierung sein könnte. Dies scheint im CGLIB-Code zu geschehen, der das POJO / die POJO-Entität instanziiert. Ist das ein bekanntes "Feature"? Gibt es eine Anmerkung, mit der ich das Feld 'numberList' markieren kann, um anzuzeigen, dass es nicht null sein kann? Alle Leads werden geschätzt. Vielen Dank

Antworten auf die Frage(4)

Ihre Antwort auf die Frage