Как я могу убедиться, что CassandraOperations.selectOneById () инициализирует все поля в POJO?

Я использую Spring Data Cassandra 1.3.4.RELEASE для сохранения экземпляров класса, который у меня есть. Класс написан на Groovy, но я не думаю, что это действительно имеет значение. Я реализовал CrudRepository и внедряю экземпляр CassandraOperations в класс реализации репо. Я могу вставить, удалить и успешно выполнить большинство других операций. Однако есть сценарий, с которым я сталкиваюсь, который нарушает мой контрольный пример. Мой класс сущности выглядит примерно так:

@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 = []
}

В моем тестовом примере мне пришлось установить только несколько полей, таких как «id» и «updated», перед вызовом CassandraOperations.insert (entity), поэтому большинство из них были нулевыми в экземпляре объекта на момент вставки. Но поле numberList не было пустым, это был пустой список. Сразу после insert () я вызываю CassandraOperations.selectOneById (FooData.class, id). Я получаю экземпляр FooData обратно, и поля, которые были инициализированы при сохранении, заполняются данными. Однако я проверял равенство содержимого в своем тесте, и это не удалось, поскольку пустой список не был возвращен как пустой список в POJO, возвращенном из CassandraOperations.selectOneById (). Это на самом деле ноль. Я предполагаю, что это может быть какая-то оптимизация Кассандры. Похоже, это происходит в коде CGLIB, который создает экземпляр POJO / сущности. Это известная «фича»? Есть ли какая-то аннотация, которой я могу пометить поле 'numberList', чтобы указать, что оно не может быть нулевым? Любые выводы приветствуются. Благодарю.

Ответы на вопрос(2)

Ваш ответ на вопрос