Основываясь на сообщении об ошибке вы видите, я предполагаю, что attributes
не определен в вашем определении таблицы. Не могли бы вы отредактировать свой пост?
Но когда я построю свою CQL таблицу, как это (обратите внимание на ключ соединение секционирования itemid
и version
):
CREATE TABLE products.itemmaster (
itemid text,
version int,
productid uuid,
supplierskumap map<uuid, text>,
PRIMARY KEY ((itemid,version), productid)
);
... вставить эту строку:
INSERT INTO products.itemmaster (itemid,version,productid,supplierskumap)
VALUES ('item1',1,26893749-dcfc-42c7-892c-bee8c9cff630,
{1351f82f-5dc5-4328-82f4-962429c92a2b:'86CCG123'});
... и Я строю свой POJO следующим образом:
@Table(keyspace = "products", name = "itemmaster")
public class Product {
@PartitionKey(0)
private String itemid;
@PartitionKey(1)
private int version;
@ClusteringColumn
private UUID productid;
@Column(name="supplierskumap")
private Map<UUID,String> suppliersku;
public UUID getProductid() {
return productid;
}
public void setProductid(UUID _productid) {
this.productid = _productid;
}
public int getVersion() {
return this.version;
}
public void setVersion(int _version)
{
this.version = _version;
}
public String getItemid() {
return itemid;
}
public void setItemid(String _itemid) {
this.itemid = _itemid;
}
public Map<UUID, String> getSuppliersku() {
return suppliersku;
}
public void setSuppliersku(Map<UUID, String> _suppliersku) {
this.suppliersku = _suppliersku;
}
}
... с этим конструктором и getProd
метод моего объекта доступа к данным (DAO):
public ProductsDAO()
{
session = connect(CASSANDRA_NODES, USERNAME, PASSWORD);
prodMapper = new MappingManager(session).mapper(Product.class);
}
public Product getProd(String itemid, int version, UUID productid) {
return prodMapper.get(itemid,version,sku);
}
... этот main
класс успешно запрашивает мою таблицу и отображает мой Map
:
private static void main(String[] args) {
ProductsDAO dao = new ProductsDAO();
Product prod = dao.getProd("item1", 1, UUID.fromString("26893749-dcfc-42c7-892c-bee8c9cff630"));
System.out.println(
prod.getProductid() + " - " +
prod.getItemid() + " - " +
prod.getSuppliersku().get(UUID.fromString("1351f82f-5dc5-4328-82f4-962429c92a2b")));
dao.closeCassandra();
}
... и производит этот выход:
26893749-dcfc-42c7-892c-bee8c9cff630 - item1 - 86CCG123
ПРИМЕЧАНИЕ: Редактирование приведенного выше примера для поддержки сложного ключа раздела.
Можете ли вы поделиться своим «созданием таблицы» cql? Это, скорее всего, просто жалуется, что столбцов «атрибутов» нет. Драйвер создаст подготовленные операторы для каждого запроса, которые будут сделаны в результате заявленной модели, и похоже, что сервер отклоняет этот запрос. –
Да, вы правы, проблема решена. –