有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

字典java cassandra对象映射注释

您能否提供一个使用datastax api注释映射集合以使用Map的示例

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) 个答案

  1. # 1 楼答案

    根据您看到的错误消息,我猜表定义中没有定义attributes。你介意用这个来编辑你的帖子吗

    但是当我像这样构建CQL表时(注意itemidversion的复合分区键):

    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;
        }
    }
    

    。。。在我的数据访问对象(dao)上使用此构造函数和getProd方法:

    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
    

    注意:对上述示例进行编辑以支持复合分区键