2016-09-30 2 views
0

Я пытаюсь написать пример использования Spring Data и подключить к Кассандре (тема http://docs.spring.io/spring-data/cassandra/docs/1.0.2.RELEASE/reference/html/cassandra.core.html)java.lang.String не может быть приведен к main.java.example.Person

Классы:

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, но мне нужно, чтобы получить класс.

ответ

1

Похоже, что существует проблема с отображением произвольного объекта cqlTemplate.

Вот как я его исправил.

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

посмотреть здесь https://github.com/lemire/externalsortinginjava –

Смежные вопросы