Может ли Kundera API обрабатывать MyObj внутри MyParentObj при использовании с Cassandra

Я видел много примеров Кундеры, где хранимый объект довольно прост. У вас есть что-то вроде Car.class, и он содержит пару строковых переменных, возможно, int, сопоставленных с использованием аннотации @Column. Я даже видел некоторые переменные List, Set и Map, а также cqlsh для создания столбца этих типов.

Чего я не видел, так это пользовательского объекта, который я создал внутри объекта, и того, как он будет представлен в БД Cassandra.

Например:

public Class ContainerShip {

    @Column(name="container")
    Container myContainer;
}

public Class Container {
    @Column(name="containerName)
    String containerName;
}

Могу ли я сохранить ContainerShip в Cassandra, используя Kundera с em.persist(myShip)?

Если бы я мог, как бы выглядел cqlsh для создания столбца «контейнер»?


person Justin    schedule 14.01.2014    source источник


Ответы (1)


Вы можете внедрить объект-контейнер как встраиваемую сущность.

@Entity общедоступный класс ContainerShip {

@Column(name="container")
@Embedded
Container myContainer;

}

@Embeddable общедоступный контейнер класса {

@Column(name="containerName)
String containerName;

}

person vivek mishra    schedule 15.01.2014
comment
Интересно. Итак, каким будет тип столбца в Cassandra для Контейнера? - person Justin; 17.01.2014
comment
Он будет хранить имя контейнера в виде столбца в семействе столбцов контейнеров. По сути, если вы хотите встроить пользовательский объект или коллекцию объектов, это будет означать добавление дополнительных столбцов (широких строк) или создание ссылок (таких же, как ассоциации СУБД). Кундера предоставляет оба способа встраивания пользовательского объекта в качестве суперстолбца или составного/составного ключа. - person vivek mishra; 17.01.2014
comment
Какую версию Кундеры вы используете? 2.8.1, похоже, не работает, хотя я немного продвинул ваш пример. Я попытался сделать это контейнерами @Column(name = location)@Embedded private List‹Container›. Создал столбец в cql как список местоположений‹blob›. Получил NPE (после первого комментирования kundera.ddl.auto.prepare) в PropertyAccessorHelper Кундеры. Это сложный случай, но я не могу рекомендовать Cassandra/Kundera вместо SQLServer/hibernate, если я не могу отобразить список других объектов ;-) - person Justin; 17.01.2014
comment
Список‹Контейнер› должен быть аннотирован с помощью @ElementCollection. Кроме того, в текущей реализации Кундеры такой встроенный объект будет рассматриваться как суперстолбец. Если вы хотите использовать поддержку коллекции Cassandra, просто определите свой объект как Map, List и Set. Что касается пользовательских объектов, создайте список больших двоичных объектов и сериализуйте на уровне клиента для хранения в виде byte[]. Кундера не сериализует/десериализует за вас такие объекты. Чтобы рекомендовать Cassandra вместо SQLServer, у вас также должны быть причины, отличные от пользовательских объектов. - person vivek mishra; 20.01.2014
comment
Спасибо за ваше время! - person Justin; 20.01.2014