Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring数据Cassandra 1.3.2.RELEASE是否支持UDT注释?_Cassandra_Spring Data Cassandra_Cassandra 2.1 - Fatal编程技术网

Spring数据Cassandra 1.3.2.RELEASE是否支持UDT注释?

Spring数据Cassandra 1.3.2.RELEASE是否支持UDT注释?,cassandra,spring-data-cassandra,cassandra-2.1,Cassandra,Spring Data Cassandra,Cassandra 2.1,Spring数据Cassandra 1.3.2.RELEASE支持@UDT()吗?如果没有,我如何为此添加解决方案 谢谢请参见此处的详细信息: 我面临着同样的问题,但听起来似乎不是( 调试过程向我展示了spring数据cassandra检查 @表,@Persistent或@PrimaryKeyClass仅用于注释并引发异常 在其他情况下 > 调用init方法失败;嵌套异常为org.springframework.data.cassandra.mapping.VerifierMappingExc

Spring数据Cassandra 1.3.2.RELEASE支持@UDT()吗?如果没有,我如何为此添加解决方案

谢谢

请参见此处的详细信息:

我面临着同样的问题,但听起来似乎不是( 调试过程向我展示了spring数据cassandra检查 @表,@Persistent或@PrimaryKeyClass仅用于注释并引发异常 在其他情况下

> 调用init方法失败;嵌套异常为org.springframework.data.cassandra.mapping.VerifierMappingExceptions: Cassandra实体必须具有@Table、@Persistent或@PrimaryKeyClass注释

但我找到了解决办法。 我找到了允许我管理包含UDT和不包含UDT的实体的方法。在我的应用程序中,我使用spring cassandra数据项目,并使用direct datastax核心驱动程序。不包含UDT对象的存储库使用spring cassanta数据方法,包含UDT的对象使用自定义repositori锿。 自定义存储库使用datastax映射器,并且可以与UDT正确配合使用 (它们位于单独的软件包中,请参见下面的注释,说明需要它的原因):

请注意,以下实体使用不同的注释:

@PrimaryKeyColumn(name = "account_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)and @PartitionKey
@ClusteringColumn and @PrimaryKeyColumn(name = "area_parent_id", ordinal = 2, type = PrimaryKeyType.CLUSTERED)
乍一看,这很不舒服,但它允许您处理包含UDT和不包含UDT的对象

一个重要的注意事项是,两个repo(使用UDT和不使用UDT的应该位于不同的包中)导致Spring config查找带有repo的基本包:

@Configuration
@EnableCassandraRepositories(basePackages = {
        "com.fyb.cassandra.repositories" })
public class CassandraConfig {
..........
}
详情如下:

我面临着同样的问题,但听起来似乎不是( 调试过程向我展示了spring数据cassandra检查 @表,@Persistent或@PrimaryKeyClass仅用于注释并引发异常 在其他情况下

> 调用init方法失败;嵌套异常为org.springframework.data.cassandra.mapping.VerifierMappingExceptions: Cassandra实体必须具有@Table、@Persistent或@PrimaryKeyClass注释

但我找到了解决办法。 我找到了允许我管理包含UDT和不包含UDT的实体的方法。在我的应用程序中,我使用spring cassandra数据项目,并使用direct datastax核心驱动程序。不包含UDT对象的存储库使用spring cassanta数据方法,包含UDT的对象使用自定义repositori锿。 自定义存储库使用datastax映射器,并且可以与UDT正确配合使用 (它们位于单独的软件包中,请参见下面的注释,说明需要它的原因):

请注意,以下实体使用不同的注释:

@PrimaryKeyColumn(name = "account_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)and @PartitionKey
@ClusteringColumn and @PrimaryKeyColumn(name = "area_parent_id", ordinal = 2, type = PrimaryKeyType.CLUSTERED)
乍一看,这很不舒服,但它允许您处理包含UDT和不包含UDT的对象

一个重要的注意事项是,两个repo(使用UDT和不使用UDT的应该位于不同的包中)导致Spring config查找带有repo的基本包:

@Configuration
@EnableCassandraRepositories(basePackages = {
        "com.fyb.cassandra.repositories" })
public class CassandraConfig {
..........
}

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

如何将UserDefinedType(UDT)功能与Spring数据结合使用Cassandra:

  • 我们需要使用最新的Spring数据jar Cassandra(1.5.0.RELEASE)

    组:'org.springframework.data',名称:'springdatacassandra',版本:'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的列族:

    员工表:

    创建表employee( 员工id uuid, 员工姓名文本, 地址冻结, 主键(员工id、员工姓名) ))

  • 在domain类中,定义带有注释的字段-CassandraType和DataType应为UDT:

    @表(“雇员”)公共类雇员{ --其他字段-- @CassandraType(type=DataType.Name.UDT,userTypeName=“address\u type”) 私人地址; }

  • 为用户定义的类型创建域类:我们需要确保在用户定义的类型架构中 必须与域类中的字段名相同

    @UserDefinedType(“address_type”)公共类地址{@CassandraType(type=DataType.Name.TEXT) 私有字符串id;@CassandraType(type=DataType.Name.TEXT)私有字符串地址\u type;}

  • 在Cassandra配置中,更改以下内容:

    @Bean public CassandraMappingContext mappingContext()引发异常{ BasicAssandramappingContext mappingContext=新的BasicAssandramappingContext(); setUserTypeResolver(新的SimpleUserTypeResolver(cluster().getObject(),cassandraKeyspace)); 返回mappingContext; }

  • 用户定义的类型在任何地方都应具有相同的名称

    • @用户定义类型(“地址类型”)
    • @CassandraType(type=DataType.Name.UDT,userTypeName=“address\u type”)
    • 创建类型地址\u类型

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

    如何将UserDefinedType(UDT)功能与Spring数据结合使用Cassandra:

  • 我们需要使用最新的Spring数据jar Cassandra(1.5.0.RELEASE)

    组:'org.springframework.data',名称:'springdatacassandra',版本:'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

  • 创建用户定义的t
    @Configuration
    @EnableCassandraRepositories(basePackages = {
            "com.fyb.cassandra.repositories" })
    public class CassandraConfig {
    ..........
    }
    
    CREATE TYPE address_type ( 
        id text, 
        address_type text, 
        first_name text, 
        phone text 
    );