Java cassandra spring摄取命令不';行不通

Java cassandra spring摄取命令不';行不通,java,spring,cassandra,cql3,Java,Spring,Cassandra,Cql3,我已经建立了一个cassandra集群,并使用SpringCassandraFramework1.53。() 我想将数百万个数据集写入我的cassandra集群。使用executeAsync的解决方案工作得很好,但是spring框架中的“ingest”命令听起来也很有趣 ingest方法利用静态PreparedStatements,这些语句只为性能准备一次。数据集中的每条记录都绑定到相同的PreparedStatement,然后异步执行以获得高性能 我的代码: List<List<?

我已经建立了一个cassandra集群,并使用SpringCassandraFramework1.53。()

我想将数百万个数据集写入我的cassandra集群。使用executeAsync的解决方案工作得很好,但是spring框架中的“ingest”命令听起来也很有趣

ingest方法利用静态PreparedStatements,这些语句只为性能准备一次。数据集中的每条记录都绑定到相同的PreparedStatement,然后异步执行以获得高性能

我的代码:

List<List<?>> session_time_ingest = new ArrayList<List<?>>();
for (Long tokenid: listTokenID) {
List<Session_Time_Table> tempListSessionTimeTable = repo_session_time.listFetchAggregationResultMinMaxTime(tokenid);
session_time_ingest.add(tempListSessionTimeTable);
}

cassandraTemplate.ingest("INSERT into session_time (sessionid, username, eserviceid, contextroot," +
                " application_type, min_processingtime, max_processingtime, min_requesttime, max_requesttime)" +
                " VALUES(?,?,?,?,?,?,?,?,?)", session_time_ingest);
List>();
for(长令牌ID:listTokenID){
List TemplistSessionDimetable=repo\u session\u time.listFetchAggregationResultMinMaxTime(令牌ID);
会话\时间\摄取.add(TemplistSessionDimetable);
}
ingest(“插入会话时间(sessionid、用户名、eserviceid、contextroot,”+
应用程序类型、最小处理时间、最大处理时间、最小请求时间、最大请求时间+
“值(;
引发异常:

`Exception in thread "main" com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [varchar <-> ...tracking.Tables.Session_Time_Table]
at com.datastax.driver.core.CodecRegistry.notFound(CodecRegistry.java:679)
at com.datastax.driver.core.CodecRegistry.createCodec(CodecRegistry.java:540)
at com.datastax.driver.core.CodecRegistry.findCodec(CodecRegistry.java:520)
at com.datastax.driver.core.CodecRegistry.codecFor(CodecRegistry.java:470)
at com.datastax.driver.core.AbstractGettableByIndexData.codecFor(AbstractGettableByIndexData.java:77)
at com.datastax.driver.core.BoundStatement.bind(BoundStatement.java:201)
at com.datastax.driver.core.DefaultPreparedStatement.bind(DefaultPreparedStatement.java:126)
at org.springframework.cassandra.core.CqlTemplate.ingest(CqlTemplate.java:1057)
at org.springframework.cassandra.core.CqlTemplate.ingest(CqlTemplate.java:1077)
at org.springframework.cassandra.core.CqlTemplate.ingest(CqlTemplate.java:1068)
at ...tracking.SessionAggregationApplication.main(SessionAggregationApplication.java:68)`
`线程“main”com.datastax.driver.core.exceptions.CodecNotFoundException:未找到请求操作的编解码器:[varchar…tracking.Tables.Session\u Time\u Table]
位于com.datastax.driver.core.CodecRegistry.notFound(CodecRegistry.java:679)
位于com.datasax.driver.core.CodecRegistry.createCodec(CodecRegistry.java:540)
在com.datasax.driver.core.CodecRegistry.findCodec(CodecRegistry.java:520)上
位于com.datasax.driver.core.CodecRegistry.codecFor(CodecRegistry.java:470)
位于com.datastax.driver.core.AbstractGettableByIndexData.Codefor(AbstractGettableByIndexData.java:77)
位于com.datastax.driver.core.BoundStatement.bind(BoundStatement.java:201)
位于com.datastax.driver.core.DefaultPreparedStatement.bind(DefaultPreparedStatement.java:126)
位于org.springframework.cassandra.core.CqlTemplate.inset(CqlTemplate.java:1057)
位于org.springframework.cassandra.core.CqlTemplate.inset(CqlTemplate.java:1077)
位于org.springframework.cassandra.core.CqlTemplate.inset(CqlTemplate.java:1068)
位于…tracking.SessionAggregationApplication.main(SessionAggregationApplication.java:68)`

我编写的代码和春天的卡桑德拉·杜库一模一样。。我不知道如何将我的对象的值映射到cassandra期望的值

您的
Session\u Time\u表
类可能是一个映射的POJO,但摄入方法不使用POJO映射

相反,您需要提供一个矩阵,其中每行包含的参数数量与准备语句中绑定的变量数量相同,如下所示:

List<List<?>> rows = new ArrayList<List<?>>();

for (Long tokenid: listTokenID) {
    Session_Time_Table obj = ... // obtain a Session_Time_Table instance
    List<Object> row = new ArrayList<Object>();
    row.add(obj.sessionid);
    row.add(obj.username);
    row.add(obj.eserviceid);
    // etc. for all bound variables
    rows.add(row);
}

cassandraTemplate.ingest(
    "INSERT into session_time (sessionid, username, eserviceid, " +
    "contextroot, application_type, min_processingtime, " +
    "max_processingtime, min_requesttime, max_requesttime) " +
    "VALUES(?,?,?,?,?,?,?,?,?)", rows);
List>();
for(长令牌ID:listTokenID){
Session\u Time\u Table obj=…//获取Session\u Time\u Table实例
列表行=新的ArrayList();
行添加(对象sessionid);
行添加(对象用户名);
行添加(对象eserviceid);
//等等,用于所有绑定变量
行。添加(行);
}
食入(
“插入会话\u时间(会话ID、用户名、电子服务ID,”+
contextroot,应用程序类型,最小处理时间+
最大处理时间、最小请求时间、最大请求时间+
“值(?,,,,,,,,,,,,,,,,,,,”,行);

谢谢!完美地工作