M15*_*156 4 java inheritance cassandra datastax-java-driver datastax
我尝试使用Cassandra来持久化非常简单的POJO,但是使用类层次结构(许多子类,一个超类).我正在使用Java和Datastax驱动程序(以及对象映射器).
我的问题是Object Mapper似乎不能识别超类中注释的字段.
我实施的结构是:
@Table(keyspace = "...", name = "...")
public class Subclass extends Superclass {
public double x;
public double y;
public double z;
....
}
public class Superclass {
@PartitionKey(0)
@Column(name = "user_id")
public long userId;
@PartitionKey(1)
@Column(name = "device_id")
public long deviceId;
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试保存子类对象:
public static void main(String[] args) {
Subclass data = new Subclass();
data.deviceId = 123;
data.userId = 1212;
data.x = 0;
data.y = 1;
data.z = 2;
Cluster cluster;
Session session;
...
Mapper<Subclass> mapper = new MappingManager(session).mapper(Subclass.class);
mapper.save(data);
}
Run Code Online (Sandbox Code Playgroud)
抛出:
com.datastax.driver.core.exceptions.InvalidQueryException: Missing mandatory PRIMARY KEY part user_id
Run Code Online (Sandbox Code Playgroud)
有没有办法让它在这样的结构中运行?一种解决方案是重新声明子类中的userId/deviceID字段,但这将是非常难看的(很多重复的代码).任何想法如何存档这样的案例的良好结构或最佳实践?
| 归档时间: |
|
| 查看次数: |
1942 次 |
| 最近记录: |