以下函数将数据保存在 cassandra
. 它称之为
abstract rowToModel
方法来转换从中返回的数据 cassandra
进入各自的数据模型。
def saveDataToDatabase(data:M):Option[M] = { //TODOM - should this also be part of the Repository trait?
println("inserting in table "+tablename+" with partition key "+partitionKeyColumns +" and values "+data)
val insertQuery = insertValues(tablename,data)
println("insert query is "+insertQuery)
try {
val resultSet:ResultSet = session.execute(insertQuery) //execute can take a Statement. Insert is derived from Statement so I can use Insert.
println("resultset after insert: " + resultSet)
println("resultset applied: " + resultSet.wasApplied())
println(s"columns definition ${resultSet.getColumnDefinitions}")
if(resultSet.wasApplied()){
println(s"saved row ${resultSet.one()}")
val savedData = rowToModel(resultSet.one())
Some(savedData)
} else {
None
}
}catch {
case e:Exception => {
println("cassandra exception "+e)
None
}
}
}
这个
abstract rowToModel
定义如下
override def rowToModel(row: Row): PracticeQuestionTag = {
PracticeQuestionTag(row.getLong("year"),row.getLong("month"),row.getLong("creation_time_hour"),
row.getLong("creation_time_minute"),row.getUUID("question_id"),row.getString("question_description"))
}
但我在书中定义的打印语句 saveDataToDatabase
没有打印数据。我以为指纹会印出来 PracticeQuestionTag
但我看到的却是
我希望看到这样的事情- PracticeQuestionTag(2018,6,1,1,11111111-1111-1111-1111-111111111111,some description1)
当我打印时 one
从结果集。但我看到的是 resultset after insert: ResultSet[ exhausted: false, Columns[[applied](boolean)]]
resultset applied: truecolumns definition Columns[[applied](boolean)]
saved row Row[true]row to Model called for row null
cassandra exception java.lang.NullPointerException为什么?
ResultSet,
one以及
columnDefinitions` 没有显示数据模型中的值吗?
1条答案
按热度按时间krcsximq1#
这是故意的。insert的resultset将只包含一行,该行指示是否应用了结果。
执行条件语句时,结果集将包含一行,其中一列名为“applied”,类型为boolean。这说明条件语句是否成功。
这也是有意义的,因为resultset应该返回查询的结果,为什么要通过重新调整结果集中的所有输入来增加result set对象的数量。更多细节可以在这里找到。
当然get查询将有详细的结果集。