当前位置: 首页 > 面试题库 >

用户定义的类型与spring-data-cassandra

谢诚
2023-03-14
问题内容

我正在寻找如下创建模型,如何在spring-data-cassandra中使用用户定义的类型?

{
  email: "test@example.com",
  name: {
  fname: "First",
  lname: "Last"
  }
}

问题答案:

Spring Data Cassandra现在支持用户定义的数据类型。最新版本1.5.0.RELEASE使用Cassandra Data stax驱动程序3.1.3,因此现在可以工作。请按照以下步骤操作

如何在Spring Data Cassandra中使用UserDefinedType(UDT)功能:

  1. 我们需要使用最新版本的Spring数据Cassandra(1.5.0.RELEASE)

组:“ org.springframework.data”,名称:“ spring-data-cassandra”,版本:“ 1.5.0.RELEASE”

  1. 确保使用以下版本的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
  1. 在Cassandra中创建用户定义的类型:类型名称应与POJO类中定义的名称相同

地址数据类型

CREATE TYPE address_type ( 
    id text, 
    address_type text, 
    first_name text, 
    phone text 
);
  1. 在Cassandra中使用UDT创建列之一,以创建列族:
    员工表:
CREATE TABLE employee( 
   employee_id uuid, 
   employee_name text, 
   address frozen, 
   primary key (employee_id, employee_name) 
);
  1. 在域类中,定义带有注释的字段-CassandraType,并且DataType应该为UDT:
@Table("employee") 
public class Employee { 
   -- othere fields-- 
   @CassandraType(type = DataType.Name.UDT, userTypeName = "address_type") 
   private Address address; 
}
  1. 为用户定义的类型创建域类:我们需要确保用户定义的类型架构中的列名必须与域类中的字段名相同。
@UserDefinedType("address_type") 
public class Address { 
    @CassandraType(type = DataType.Name.TEXT) 
    private String id; 
    @CassandraType(type = DataType.Name.TEXT) 
    private String address_type; 
}
  1. 在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


 类似资料:
  • 我对卡桑德拉的数据建模有一个疑问,希望能在这里提出一些建议。 我们正在尝试构建一个多租户应用程序,我们希望数据结构由用户定义。用户可以定义数据源、字段数量、数据类型、顺序等,然后基于此结构上载数据。既然Cassandra不支持混合数据类型列表,我们如何在Cassandra之上设计这样的应用程序呢。当前集合类型为映射(相同类型)/集/列表(相同类型)。此外,是否可以基于用户定义的实体查询数据? 目前

  • 我有一个实体Person,它有一个属性Name。name没有被标记为实体。对于Name类,我有一个属性转换器,它通过名字和姓氏的字符串连接创建一个全名。所以对于个人实体,列名是字符串类型。 这是可行的。但现在我想扩展我的个人存储库。我想按她的姓找人。但是 或 不起作用。我得到以下例外: 我怎样才能解决这个问题?谢谢和问候 编辑:

  • 问题内容: 就像我们使用__ToString一样,有没有一种方法来定义铸造方法? 问题答案: 无需在php中键入强制类型转换。 编辑: 由于这个话题似乎引起一些混乱,我想我要详细说明一下。 在Java之类的语言中,有两种可能带有类型。编译器有一个关于类型的概念,而运行时还有一个关于类型的想法。编译器的类型与变量相关,而运行时引擎则跟踪值的类型(已将其分配给变量)。变量类型在编译时是已知的,而值类型

  • 问题内容: 假设我有一个用户定义的类型: 现在,我想创建一个表来保存这些类型。我可以执行以下操作: 这给了我一张只有一列的表格test_type_field。 有没有一种简单而自动化的方法来代替,以创建一个表,使其具有2列f1和f2?。这样就等同于编写: 问题答案: 你有没有尝试过:

  • 有时候需要自定义实现一些repository的新方法。Spring Data repositories允许你很容易集成你自己实现的repostiroy功能,包括抽象的CRUD和查询功能

  • 问题内容: 是否可以在SQL中的另一个用户定义表类型(嵌套的用户定义表类型)中使用用户定义的表类型。 我有高级发送表中的行的数据表。 请帮助如何将表行中的表数据从 asp.net发送到sql 。通过循环还是有任何简单的方法将嵌套表数据发送到服务器。 问题答案: 不,为什么会这样?这不是SQL Server(或任何关系数据库)的工作方式。 从TechNet的“用户定义的表类型”页面上: 限制 用户定