我希望创建如下模型,如何在 spring-data-cassandra 中使用用户定义的类型?
{
email: "[email protected] /cdn-cgi/l/email-protection",
name: {
fname: "First",
lname: "Last"
}
}
Spring Data Cassandra 现在支持用户定义的数据类型。最新版本 1.5.0.RELEASE 使用 Cassandra Data stax 驱动程序 3.1.3,因此现在可以运行。请按照以下步骤使其正常工作
如何将 UserDefinedType(UDT) 功能与 Spring Data Cassandra 一起使用:
-
我们需要使用最新的 Spring data Cassandra jar (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
);
- 在 Cassandra 中使用其中一列作为 UDT 创建列族:
员工表:
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 配置中,更改此:
@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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)