- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我尝试使用 Cassandra 来持久化非常简单的 POJO,但使用类层次结构(许多子类,一个父类(super class))。我正在使用 Java 和 Datastax 驱动程序(以及对象映射器)。
我的问题是对象映射器似乎无法识别在父类(super class)中注释的字段。
我实现的结构是:
@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;
}
然后我尝试保存子类对象:
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);
}
抛出:
com.datastax.driver.core.exceptions.InvalidQueryException: Missing mandatory PRIMARY KEY part user_id
有没有办法让它在这样的结构中运行?一种解决方案是在子类中重新声明 userId/deviceID 字段,但这会非常难看(很多重复代码)。对如何为此类案例归档良好结构或最佳实践有什么想法吗?
最佳答案
更新:从版本 3.1.0 开始,驱动程序现在支持继承,如问题中所述。参见 Polymorphism Support section of the driver manual了解更多详情:
When mapping an entity class or a UDT class, the mapper will transparently scan superclasses and superinterfaces for annotations on fields and getter methods, thus enabling the polymorphic mapping of one class hierarchy into different CQL tables or UDTs.
Java 驱动程序 4.1.0+ 还将支持实体和 daos 的继承。
原答案:
很遗憾,目前您无法执行此操作。您需要创建两个具有重复结构的独立类。如果您想以通用方式处理两个实现的对象,您可以创建一个具有共享字段的接口(interface)。
有票JAVA-541要添加对此的支持,如果您希望在驱动程序中看到此功能,请投票。
关于java - 使用 Cassandra 的 Datastax 实体映射器时如何使用继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32949827/
我正在阅读 Scylla 的文档,因为我们正计划从 DSE 迁移到本地 Scylla。然而,in their documentation ,他们说不支持 DSE SSTable 格式。 Here他们提
我正在使用与 Datastax Enterprise 捆绑在一起的 gremlin-console (v3.2.7)。启动时它会自动连接到远程 gremlin 服务器。接下来,我创建一个别名来访问右侧
我正在阅读 Scylla 的文档,因为我们正计划从 DSE 迁移到本地 Scylla。然而,in their documentation ,他们说不支持 DSE SSTable 格式。 Here他们提
有谁知道如何在使用 amazon ec2 M3.Xlarge 机器的集群中使用 Datastax 企业(使用 opscenter)? 当我尝试使用这些类型的实例(使用 ssd)时,出现以下错误: 启动
我了解 DSE 5.1 运行 Solr 6.0 版本。我正在尝试使用 Solr 本地参数来使用 facet.pivot 功能,但它似乎不起作用。 我的数据如下 Simple 4 fields 我需要的
我在 Datastax 4.6 集群上有一个大型但简单的 Cassandra 数据库。对于这个非常简单的用例来说,许可证续订是禁止的,我正在尝试迁移到直接的 Apache 或 Datastax Com
我正在尝试在 Windows 7 机器上使用 Datastax C# 客户端驱动程序连接到在虚拟机器 (Ubuntu) 上运行的 DSE Cassandra。 这是我的代码: Cluster _clu
我从 CLI 中创建了这样的列族- create column family profile with key_validation_class = 'UTF8Type' and co
我正在使用 OpsCenter 5.1.1 运行 DSE 4.6.5 集群 (Cassandra 2.0.14.352) 一天一两次,其中一个节点(有时更多)停止报告指标,直到我手动重新启动 data
我需要在 cassandra 的表中选择不同的计数。 据我所知,cassandra 不支持直接不同计数,甚至像 rdbms 这样的嵌套查询也不支持。 select count(*) from (sel
我在尝试为创建的角色授予权限时遇到异常。 命令: GRANT ALL PERMISSIONS on KEYSPACE test_ks to ks_admin; 错误: ServerError: jav
我刚刚安装了 DataStax DevCenter。但是在加载时,会弹出自动更新和使用页面。但是,“确定”按钮被禁用且无法点击。所以我无法通过应用程序的启动加载。我怎样才能绕过这个? Click he
我试图在本地启动DSE 5.0.1 Cassandra(单节点)。 出现以下错误: CassandraDaemon.java:698 - Cannot start node if snitch's d
我刚刚安装了DataStax Community Edition,但是在尝试运行以下命令时; C:\> net start DataStax_DDC_Server 我得到以下回应: 谢谢 最佳答案 我
我使用 datastax java 驱动程序构建了一个选择查询。我使用限制选项设置限制。但是我看到另一个也可以设置的属性 setFetchSize(整数大小) 根据文档,DEFAULT_FETCH_S
刚刚在我的 Mac 上安装(从下载的 dmg 复制应用程序)DevCenter 1.6,运行安装了 jdk 8u152 的 macOs Sierra 10.12.6。应用程序加载了一个 UI(启动画面
我们可以像这样创建一个集群实例。 cluster = Cluster .builder() .addContactPoint("192.168.0.30") .withRetryPolicy(Def
我在127.0.1.1上运行自己的cassandra版本。我将rpc_address和address更改为127.0.1.1。 当我启动 Opscenter 时,系统会提示我安装agents,并通过推
我正在使用 Cassandra 1.2.5 和二级索引。当我运行准备好的语句时,没有返回数据。我有数据。另外,对于索引列,我确实有重复的值。我正在做的是根据 user_id 重新调整 video_id
我正在使用 Datastax 可爱的 cassandra java 驱动程序。我试图将所有查询字符串封装到内置访问器中以进行映射,但我需要能够设置查询的分页状态。 我发现这可以通过普通语句(Simpl
我是一名优秀的程序员,十分优秀!