スタンドアロンの 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: com.prashanth.ts.client.CassandraApp.main(CassandraApp.java:40) で java.lang.String を com.prashanth.ts.entity.Person にキャストできませんsun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) で 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() メソッドに渡そうとしました。
注:挿入操作は完全に機能しています。