java.lang.String 无法转换为 main.java.example.Person

标签 java cassandra spring-data

我正在尝试使用 Spring Data 编写一个示例并连接到 cassandra (主题http://docs.spring.io/spring-data/cassandra/docs/1.0.2.RELEASE/reference/html/cassandra.core.html)

类(class):

public class CassandraApp {

    private static final Logger LOG = LoggerFactory.getLogger(CassandraApp.class);

    private static Cluster cluster;
    private static Session session;

    public static void main(String[] args) {

        try {

            cluster = Cluster.builder().addContactPoints(InetAddress.getLocalHost()).build();

            session = cluster.connect("mykeyspace");

            CassandraOperations cassandraOps = new CassandraTemplate(session);

            cassandraOps.insert(new Person("1234567890", "David", 40));

            Select s = QueryBuilder.select().from("person");
            s.where(QueryBuilder.eq("id", "1234567890"));

            LOG.info(cassandraOps.queryForObject(s, Person.class).getId());

            cassandraOps.truncate("person");

        } catch (UnknownHostException e) {
            e.printStackTrace();
        }

    }
}

@Table
public class Person {

    @PrimaryKey
    private String id;

    private String name;
    private int age;

    public Person(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String getId() {
        return this.id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
    }

}

我得到了这个异常:

log4j:WARN No appenders could be found for logger (com.datastax.driver.core.Cluster).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to main.java.example2.Person
at main.java.example2.CassandraApp.main(CassandraApp.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

cassandraOps.queryForObject(s, Person.class) 返回一个 String 值,但我需要获取一个类。

最佳答案

cqlTemplate 的任意对象映射似乎存在问题。

这是我修复它的方法。

   Person pnObj = cassandraOps.selectOne(s, Person.class);
   LOG.info(pnObj.getId());

关于java.lang.String 无法转换为 main.java.example.Person,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39794800/

相关文章:

unit-testing - 使用 spring-boot-starter-test 和 cassandra 进行单元测试

java - 用于开发和生产的不同 PersistenceConfig.java

java - 按引用实体中的第一项对 JPA 存储库响应进行排序

spring - 使用 Spring Data Cassandra 启用 Cassandra 客户端到节点加密

java - Cassandra 准备语句在架构迁移后损坏

java - 绝地武士获取数据 : JedisConnectionFailureException iterating a section of code over long period of time

java - Android - 将日期格式化为 "Day, Month dd, yyyy"

java - 在Java中如何匹配不是 "["的字符?

想要与 Servlet 交互的 Java 控制台程序

java - 使用 iText 2.1.7 合并大型 PDF