2015-08-03 2 views
2

Можете ли вы привести пример для сопоставления коллекций, используя аннотации datastax api для использования Map.java cassandra mapping mapping аннотации

class pojo { 

    @PartitionKey(value = 0) 
    @Column(name = "user_id") 
    String userId; 

    @Column(name = "attributes") 
     // How to map it 
     Map<String, String> attributes; 
    } 

журнал ошибок:

2015-08-03 16:33:34,568 INFO com.jpma.jpmc.slot.persistance.DAOFactory main - Cassandra Cluster Details: ConnectionCfg [userName=test, password=test, port=9042, seeds=[Ljava.lang.String;@1a85bd75, keySpace=test] 
java.lang.Class 
2015-08-03 16:33:34,646 DEBUG com.datastax.driver.mapping.EntityMapper main - Preparing query INSERT INTO "test"."user_event_date"("user_id","entry_date","entry_time","app","attributes","user_ip","user_authschemes") VALUES (?,?,?,?,?,?,?); 
com.datastax.driver.core.exceptions.InvalidQueryException: Unknown identifier attributes 
+1

Можете ли вы поделиться своим «созданием таблицы» cql? Это, скорее всего, просто жалуется, что столбцов «атрибутов» нет. Драйвер создаст подготовленные операторы для каждого запроса, которые будут сделаны в результате заявленной модели, и похоже, что сервер отклоняет этот запрос. –

+0

Да, вы правы, проблема решена. –

ответ

3

Основываясь на сообщении об ошибке вы видите, я предполагаю, что 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 

ПРИМЕЧАНИЕ: Редактирование приведенного выше примера для поддержки сложного ключа раздела.

+0

Да, у меня возникла проблема, можете ли вы поделиться примером, чтобы получить объект, когда у меня есть составной partion key @PartitionKey (0) \t @Column (name = "user_id") \t String userId; \t \t @PartitionKey (1) \t @Column (имя = "attribute_key") \t Строка attributeKey; –

+0

@PavanKumar Редактировать сделано. Надеюсь это поможет! – Aaron