标签: spring-data-cassandra

Spring数据Cassandra 2.0 Select BLOB列返回不正确的ByteBuffer数据

上下文:Spring数据cassandra官方1.0.2.RELEASE来自Maven Central repo,CQL3,cassandra 2.0,datastax driver 2.0.4

背景:cassandra blob数据类型映射到Java ByteBuffer.

下面的示例代码演示了您不会使用等效插入旁边的select来检索正确的字节.实际检索的数据以许多垃圾字节为前缀,实际上看起来像是整行的序列化.这篇与Cassandra 1.2相关的老帖子提示我们可能必须从长度为ByteBuffer.remaining()的ByteBuffer.arrayOffset()开始,但是arrayOffset值实际上是0.

我发现了一个spring-data-cassandra 2.0.0.SNAPSHOT但CassandraOperations API有很大的不同,它的包名也是:org.springdata ...与org.springframework ...

帮助解决这个问题,但非常欢迎.

与此同时,我似乎必须将Base64的二进制数据编码/解码到文本数据类型列.

---这里是我使用的简单表CQL元数据-------------

CREATE TABLE person (
  id text,
  age int,
  name text,
  pict blob,
  PRIMARY KEY (id)
) ;
Run Code Online (Sandbox Code Playgroud)

---跟随映射到CQL表的简单数据对象---

package org.spring.cassandra.example; 

import java.nio.ByteBuffer;
import org.springframework.data.cassandra.mapping.PrimaryKey; 
import org.springframework.data.cassandra.mapping.Table; 

@Table 
public class Person { 

 @PrimaryKey 
 private String id; 

 private int age; 
 private String name; 
 private ByteBuffer pict; 

 public Person(String id, int age, String name, ByteBuffer pict) { 
  this.id = id; this.name = …
Run Code Online (Sandbox Code Playgroud)

bytebuffer blob cassandra spring-data-cassandra

6
推荐指数
2
解决办法
6367
查看次数

将Joda时间映射到Cassandra的Date类型

在使用Spring-data的cassandra模块进行映射时,建议将Joda时间映射到Cassandra的Date类型的方法是什么?在JPA/Hibernate中是否有@Type注释的等价物?

cassandra spring-data spring-data-cassandra

6
推荐指数
1
解决办法
1953
查看次数

用户定义的类型,带有spring-data-cassandra

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

{
  email: "test@example.com",
  name: {
  fname: "First",
  lname: "Last"
  }
}
Run Code Online (Sandbox Code Playgroud)

spring spring-data-cassandra

5
推荐指数
2
解决办法
5323
查看次数

如何使用Spring Data Cassandra将java.util.Date值插入Cassandra日期类型列?

我有一个带有日期类型列的cassandra表,如下所示:

create table people
(
   id int primary key, 
   name text, 
   email text, 
   dob date
);
Run Code Online (Sandbox Code Playgroud)

我正在使用SpringBoot 1.5.2 + Spring Data Cassandra Starter.

@Table("people")
public class Person {
    @PrimaryKey
    Integer id;
    private String name;
    private String email;
    private java.util.Date dob;
    //setters and getters
}

public interface PersonRepository extends CrudRepository<Person, Integer>{

}
Run Code Online (Sandbox Code Playgroud)

我按如下方式插入新人:

personRepository.save(new Person(1, "Siva","siva@gmail.com", new java.util.Date()));
Run Code Online (Sandbox Code Playgroud)

它抛出以下错误:

Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: Expected 4 byte long for date (8)
    at com.datastax.driver.core.Responses$Error.asException(Responses.java:136) ~[cassandra-driver-core-3.1.4.jar:na]
    at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:179) ~[cassandra-driver-core-3.1.4.jar:na]
    at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:177) ~[cassandra-driver-core-3.1.4.jar:na]
    at com.datastax.driver.core.RequestHandler.access$2500(RequestHandler.java:46) ~[cassandra-driver-core-3.1.4.jar:na] …
Run Code Online (Sandbox Code Playgroud)

java spring cassandra spring-boot spring-data-cassandra

5
推荐指数
1
解决办法
9153
查看次数

Spring data Cassandra @Indexed 注解

我正在研究 Spring data Cassandra 在创建实体时,我为字段提供了所需的注释,但是当我为在架构中创建二级索引提供 @Indexed 注释时,我无法在不提供允许的情况下查询索引属性过滤。有人可以告诉我如何在 Cassandra 中使用 Spring 数据注释创建二级索引吗

This is the sample cod that I am using creating a Sprind data Cassandra Entity.@Indexed annotation not creating a secondary index in Cassandra database

import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import org.springframework.data.cassandra.mapping.CassandraType;
import org.springframework.data.cassandra.mapping.Column;
import org.springframework.data.cassandra.mapping.Indexed;
import org.springframework.data.cassandra.mapping.PrimaryKey;
import org.springframework.data.cassandra.mapping.Table;
import org.springframework.data.cassandra.mapping.UserDefinedType;
import com.datastax.driver.core.DataType;
import com.suntecgroup.xelerate.platform.demo.config.SpringContainer;
import com.suntecgroup.xelerate.platform.demo.store.CustomerCassandraStore;
import com.suntecgroup.xelerate.platform.demo.store.impl.CustomerCassandraStoreImpl;

@Table(value="CustomerCassandra")
public class CustomerCassandra extends CassandraEntity<Integer> {

    @PrimaryKey(value="cust_id")
    private Integer custId;
    @Indexed(value="name")
    private String name;
    @Indexed(value="email")
    private String email; …
Run Code Online (Sandbox Code Playgroud)

java spring spring-data-cassandra

5
推荐指数
1
解决办法
2077
查看次数

Spring Data Cassandra:“用户类型没有属性 findAll”

我有一个非常简单的 spring 数据 cassandra 项目,其应用程序上下文无法启动。整个项目由四个文件组成:域对象、存储库接口、cassandra 配置和应用程序入口点。这是域对象:

@Table
public class User {
    @PrimaryKeyColumn(name = "user_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
    public UUID userId;
}
Run Code Online (Sandbox Code Playgroud)

和存储库界面:

@Repository
public interface UserRepository extends PagingAndSortingRepository<User, UUID> {
}
Run Code Online (Sandbox Code Playgroud)

配置非常简单:

@Configuration
public class TestSpringDataCassandraConfiguration extends AbstractCassandraConfiguration {
    @Override 
    protected String getKeyspaceName() {
        return "company";
    }
    @Override 
    protected List<CreateKeyspaceSpecification> getKeyspaceCreations() {
        return Collections.singletonList(CreateKeyspaceSpecification
                .createKeyspace(getKeyspaceName())
                .ifNotExists()
                .withSimpleReplication(1));
    }
    @Override 
    public String[] getEntityBasePackages() {
        return new String[] { "com.company.project.cassandra.entity"};
    }
    @Override 
    public SchemaAction getSchemaAction() {
        return SchemaAction.CREATE_IF_NOT_EXISTS;
    } …
Run Code Online (Sandbox Code Playgroud)

spring cassandra spring-data spring-boot spring-data-cassandra

5
推荐指数
1
解决办法
2116
查看次数

使用 Spring Data 中的 CassandraRepository 实现 Cassandra 分页的正确方法

我正在寻找一种解决方案,通过 Cassandra(版本)数据库为基于 Spring Boot 的 REST 服务实现分页3.11.3。我们使用 Spring Boot2.0.5.RELEASE作为spring-boot-starter-data-cassandra依赖项。

由于 Spring Data 的CassandraRepository<T, ID>接口没有扩展,PagingAndSortingRepository我们无法获得像JPA.

我阅读了 Spring Data Cassandra 文档,并找到了一种使用 Cassandra 和 Spring Data 实现分页的可能方法,因为该CassandraRepository接口具有以下可用方法Slice<T> findAll(Pageable pageable);。我知道 Cassandra 无法获取特定的临时页面,并且始终需要第 0 页来迭代所有页面,如下所示CassandraPageRequest

Cassandra 特定的 {@link PageRequest} 实现提供对 {@link PagingState} 的访问。此类允许创建第一个页面请求,并表示通过 Cassandra 分页基于获取页面的进度,并允许仅向前导航。访问特定页面需要获取所有页面,直到到达所需页面。

在我的用例中,我们有 > 1.000.000 个数据库条目,并且希望在单页应用程序中分页显示它们。

我当前的方法如下所示:

@RestController
@RequestMapping("/users")
public class UsersResource {

  @Autowired
  UserRepository    userRepository;

  @GetMapping
  public ResponseEntity<List<User>> getAllTests(
            @RequestParam(defaultValue = "0", …
Run Code Online (Sandbox Code Playgroud)

java cassandra spring-data spring-boot spring-data-cassandra

5
推荐指数
1
解决办法
5094
查看次数

如何将 Testcontainers Cassandra 与 Spring Data for Apache Cassandra 一起使用?

我为与 Cassandra 一起使用的 Spring Boot 应用程序开发了集成测试。我CassandraTemplate用于与 Cassandra 通信。

我对数据库src/test/resources/application.properties有以下配置:

spring.data.cassandra.contact-points=cassandra-host
spring.data.cassandra.port=9042
Run Code Online (Sandbox Code Playgroud)

Testcontainers使用 Cassandra创建,我尝试了两种方法:

1) https://niels.nu/blog/2017/spring-cassandra-integration-tests.html

@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@SpringBootTest(classes = {ExampleApplication.class})
@ContextConfiguration(initializers = CounterIntegrationTestContainers.Initializer.class)
@EnableConfigurationProperties
public class CounterIntegrationTestContainers extends CounterIntegrationTest {
    @ClassRule
    public static GenericContainer cassandra =
            new GenericContainer("cassandra:3")
                    .withExposedPorts(9042);

    public static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
        @Override
        public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
            EnvironmentTestUtils.addEnvironment(
                "testcontainers",
                configurableApplicationContext.getEnvironment(),
                "cassandra.host=" + cassandra.getContainerIpAddress(),
                "cassandra.port=" + cassandra.getMappedPort(9042)
            );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

2) https://www.baeldung.com/spring-boot-testcontainers-integration-test - 在本例中我们可以看到 postgresql 容器,但我将其更改为 Cassandra:

public …
Run Code Online (Sandbox Code Playgroud)

cassandra spring-boot spring-data-cassandra spring-boot-test testcontainers

5
推荐指数
1
解决办法
2253
查看次数

Spring-Data-Cassandra SchemaAction 不起作用

我正在尝试通过扩展在我的应用程序中配置 CassandraCassandraAutoConfiguration

我使用 springCassandraRepository进行数据库访问,并使用带有o.s.d.cassandra.core.mapping.Table注释的类来定义我的表。

我还配置了以下属性以及集群所需的其他属性

spring: 
  data:
   cassandra:
     schema-action: CREATE_IF_NOT_EXISTS
Run Code Online (Sandbox Code Playgroud)

但应用程序启动时 Cassandra 中不会创建任何表。 schemaActionCassandraProperties 不工作。

如果我在启动时ApplicationRunner通过使用以编程方式创建表cassandraTemplate.getCqlOperations().execute(...),那么一切都会正常工作。

在这种情况下,我可以使用我的存储库。find() 和 save() 方法。只是为了证明我的@table类写得正确

spring cassandra spring-boot datastax spring-data-cassandra

5
推荐指数
1
解决办法
2039
查看次数

Spark 任务失败并出现 java.lang.ClassNotFoundException:com.datastax.spark.connector.rdd.partitioner.CassandraPartition

我正在尝试创建一个 Spring Boot (2.7.5) 项目,该项目写入 Cassandra (使用 Spring Data cassandra)并使用 Spark 从 Cassandra 读取。当我将 Spark Master 作为 local[*] 提供时,它工作正常,但当我尝试连接到 Spark Cluster Master URL 时,出现如下错误。

卡桑德拉版本 - 4.0.1

火花版本 - 3.1.3

2022-11-17 11:45:03 - Code generated in 2093.165617 ms
2022-11-17 11:45:03 - Starting job: show at HomeController.java:26
2022-11-17 11:45:03 - Got job 0 (show at HomeController.java:26) with 1 output partitions
2022-11-17 11:45:03 - Final stage: ResultStage 0 (show at HomeController.java:26)
2022-11-17 11:45:03 - Parents of final stage: List()
2022-11-17 11:45:03 - …
Run Code Online (Sandbox Code Playgroud)

cassandra apache-spark spring-data-cassandra spark-cassandra-connector

5
推荐指数
0
解决办法
116
查看次数