Я сейчас работаю над новым проектом и выбрал Cassandra в качестве нашего хранилища данных. У меня есть сценарий использования, в котором я храню цены на материал и для этого sh создал список пользовательских типов (UDT). Но, к сожалению, пока происходит десериализация с использованием драйвера datastax. После запросов на требуемые данные я обнаружил, что объект списка является нулевым, в то время как в базе данных есть значение для него. Это текущее ограничение для драйвера Cassandra java или я что-то упустил?
Вот так выглядит моя упрощенная сущность (таблица):
@PrimaryKeyColumn(name = "tenant_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
private long tenantId;
@PrimaryKeyColumn(name = "item_id", ordinal = 1, type = PrimaryKeyType.CLUSTERED)
private String itemId;
@CassandraType(type = DataType.Name.LIST, userTypeName = "volume_scale_1")
private List<VolumeScale> volumeScale1;
}
Итак, я получаю volumeScale1 как null после запроса выбора базы данных.
А вот так выглядит мой UDT:
- В базе данных Cassandra:
CREATE TYPE pricingservice.volume_scale (
from_scale int,
to_scale int,
value frozen<price_value>
);
Как UDT в java:
@UserDefinedType("volume_scale")
public class VolumeScale
{
@CassandraType(type = DataType.Name.TEXT, userTypeName = "from_scale")
@Column("from_scale")
private String fromScale;
@CassandraType(type = DataType.Name.TEXT, userTypeName = "to_scale")
@Column("to_scale")
private String toScale;
@CassandraType(type = DataType.Name.UDT, userTypeName = "value")
private PriceValue value;
// getter and setter
}
Я также пытался использовать Object Mapper из java самого драйвера согласно предложению @Alex, но застрял на одном Точка, в которой создание объекта с использованием ItemPriceByMaterialMapperBuilder вызывает ошибку компиляции. Требуется ли что-нибудь дополнительное для обработки аннотаций или я что-то упустил? Есть ли у вас какие-либо идеи, как использовать аннотацию Mapper? Я использовал Google AutoService также для внешней обработки аннотаций, но не работал.
@Mapper
//@AutoService(Processor.class)
public interface ItemPriceByMaterialMapper
// extends Processor
{
static MapperBuilder<ItemPriceByMaterialMapper> builder(CqlSession session) {
return new ItemPriceByMaterialMapperBuilder(session);
}
@DaoFactory
ItemPriceByMaterialDao itemPriceByMaterialDao ();
// @DaoFactory
// ItemPriceByMaterialDao itemPriceByMaterialDao(@DaoKeyspace CqlIdentifier
// keyspace);
}
Используемая версия:
Java Версия: 1.8
DataStax OSS java -Driver-Mapper-Processor: 4.5.1
DataStax OSS java -Driver-Mapper-Runtime: 4.5.1
Cassandra: 3.11.4
Spring Базовая структура загрузки: 2.2.4.RELEASE