【发布时间】:2017-06-27 22:40:04
【问题描述】:
我正在使用 datastax cassandra 3.1.2。我在 cassandra 中创建了下表并插入了一条记录。
CREATE TYPE memory ( capacity text );
create TABLE laptop ( id uuid primary key, model text, ram frozen<memory> );
select * from laptop ;
id | model | ram
--------------------------------------+---------------+-------------------
e55cba2b-0847-40d5-ad56-ae97e793dc3e | Dell Latitude | {capacity: '8gb'}
当我尝试使用 Cassandra Accessor 和以下代码从 Java 中的冻结类型内存中获取容量字段时:
this.cluster = Cluster.builder().addContactPoint(node).withPort(port).build();
session = cluster.connect();
MappingManager manager = new MappingManager(session);
LaptopAccessor laptopAccessor = manager.createAccessor(LaptopAccessor.class);
Result<Laptop> cp = laptopAccessor.getOne(UUID.fromString("e55cba2b-0847-40d5-ad56-ae97e793dc3e"));
System.out.println(cp.one());
它给内存数据点本身是空的。
id = null model = null ram = null
我期待映射器在映射时创建 ram 实例并将容量字段映射到其中并返回笔记本电脑 bean。
我有以下访问器接口:
@Accessor
interface LaptopAccessor {
@Query("SELECT ram.capacity FROM user_info.laptop where id=?")
Result<Laptop> getOne(UUID id);
}
上表我有以下 java bean。
@Table(keyspace = "user_info", name = "laptop")
public class Laptop {
private UUID id;
private String model;
private Memory ram;
@PartitionKey
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
@Frozen
public Memory getRam() {
return ram;
}
public void setRam(Memory ram) {
this.ram = ram;
}
@Override
public String toString() {
return "id = " + id + " model = " + model + " ram = " + ram;
}
}
@UDT(keyspace = "user_info", name = "memory")
public class Memory {
private String capacity;
@Field
public String getCapacity() {
return capacity;
}
public void setCapacity(String capacity) {
this.capacity = capacity;
}
@Override
public String toString() {
return "capacity = " + capacity ;
}
}
当我更改查询以检索整个 ram UDT 时,代码工作正常。有人可以告诉我为什么当我从查询中的 udt 中选择某些字段时映射器不起作用?
cassandra 不支持这个吗?获取 UDT 字段的任何解决方法?
【问题讨论】:
标签: datastax-java-driver cassandra-3.0