【发布时间】:2016-12-16 04:35:54
【问题描述】:
我希望创建如下模型,如何在 spring-data-cassandra 中使用用户定义的类型?
{
email: "test@example.com",
name: {
fname: "First",
lname: "Last"
}
}
【问题讨论】:
标签: spring spring-data-cassandra
我希望创建如下模型,如何在 spring-data-cassandra 中使用用户定义的类型?
{
email: "test@example.com",
name: {
fname: "First",
lname: "Last"
}
}
【问题讨论】:
标签: spring spring-data-cassandra
Spring Data Cassandra 现在支持用户定义的数据类型。最新版本 1.5.0.RELEASE 使用 Cassandra Data stax 驱动程序 3.1.3,因此它现在可以工作了。请按照以下步骤使其正常工作
如何在 Spring Data Cassandra 中使用 UserDefinedType(UDT) 功能:
我们需要使用最新的 jar 的 Spring data Cassandra (1.5.0.RELEASE)
组:'org.springframework.data',名称:'spring-data-cassandra',版本:'1.5.0.RELEASE'
确保它使用以下版本的 jar:
datastax.cassandra.driver.version=3.1.3 spring.data.cassandra.version=1.5.0.RELEASE spring.data.commons.version=1.13.0.RELEASE spring.cql.version=1.5.0.RELEASE
在 Cassandra 中创建用户定义类型:类型名称应与 POJO 类中定义的相同
地址数据类型
CREATE TYPE address_type (
id text,
address_type text,
first_name text,
phone text
);
员工表:
CREATE TABLE employee(
employee_id uuid,
employee_name text,
address frozen,
primary key (employee_id, employee_name)
);
在域类中,定义带有注解的字段-CassandraType,DataType应该是UDT:
@Table("employee")
public class Employee {
-- othere fields--
@CassandraType(type = DataType.Name.UDT, userTypeName = "address_type")
private Address address;
}
为用户定义类型创建域类:我们需要确保用户定义类型架构中的列名必须与域类中的字段名相同。
@UserDefinedType("address_type")
public class Address {
@CassandraType(type = DataType.Name.TEXT)
private String id;
@CassandraType(type = DataType.Name.TEXT)
private String address_type;
}
在 Cassandra Config 中,更改此项:
@Bean public CassandraMappingContext mappingContext() throws Exception {
BasicCassandraMappingContext mappingContext = new BasicCassandraMappingContext();
mappingContext.setUserTypeResolver(new
SimpleUserTypeResolver(cluster().getObject(), cassandraKeyspace));
return mappingContext;
}
用户定义的类型应该在所有地方都具有相同的名称。例如
@UserDefinedType("address_type")
@CassandraType(type = DataType.Name.UDT, userTypeName = "address_type")
CREATE TYPE address_type
【讨论】:
Spring Data Cassandra 目前在 SD Cassandra 的映射基础架构中不支持 Cassandra 数据库 UDTs 或 Tuple Types。不过,我们确实计划在即将发布的版本中解决这两个问题。
查看并关注DATACASS-284 - Add support for TupleType/TupleValue 和DATACASS-172 - How to handle CUSTOM, User Defined TYPEs 了解更多详情。
注意...
SD Cassandra 最近被转移到托管/维护的 SD 项目的 Pivotal 保护伞下,我和 @mp911de 都是现在的项目负责人。
我们最近在 SpringOne 平台 2016 上的 SD Cassandra 上presented,在那里我们概述了该项目的roadmap(幻灯片 11,第 3 个项目符号)。
【讨论】: