我正在尝试使用独立的 main() 方法访问 Cassandra @ localhost。main() 方法使用来自 spring-data-cassandra 模块的 DataStax 驱动程序和 CassandraOperations 类。CassandraOperation
的queryForObject()
方法总是返回主键而不是实体对象。
我只是使用Spring Data Documentation中给出的代码示例。
Apache-Cassandra version : 2.1.2
Spring-Data-Cassandra version : 1.2.0.RELEASE
Entity Class :
import org.springframework.data.cassandra.mapping.PrimaryKey;
import org.springframework.data.cassandra.mapping.Table;
@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 id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
客户代码:
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("person");
CassandraOperations cassandraOps = new CassandraTemplate(session);
cassandraOps.insert(new Person("1234567890", "David", 40));
Select s = QueryBuilder.select().from("person");
s.where(QueryBuilder.eq("id", "1234567890"));
System.out.println(cassandraOps.queryForObject(s, Person.class).getId());
cassandraOps.truncate("person");
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
运行时异常:
线程“主”java.lang.ClassCastException 中的异常:java.lang.String 无法在 com.prashanth.ts.client.CassandraApp.main(CassandraApp.java:40) 处转换为 com.prashanth.ts.entity.Person sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method。在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 调用(Method.java:606)
我是 Spring Data 的新手。任何人都可以帮助我确定我在这里做错了什么。
我还尝试删除 QueryBuilder 并将一个简单的查询字符串(例如“select * from person”)传递给 queryForObject() 方法
注意:插入操作运行良好。