我正在向开源项目(支柱)添加新功能以迁移Cassandra表。我在操作中遇到一个问题,即插入值为新表。 卡桑德拉有一张桌子:
create table customer( name text, age int, point int, primary key(name, age) )
我想从此表迁移到test_person表。
create table test_person ( name text, surname text, point int, city text, primary key(name) )
这是一个操作:
var s: PreparedStatement = session.prepare("insert into test_person (name, age, point) values (?, ?, ?)");
var r: Row = session.execute("select * from customer").one()
var arr: Array[AnyRef] = new Array[AnyRef](3)
arr(0) = row.getObject("name")
arr(1) = row.getObject("age")
arr(2) = row.getObject("point")
session.execute(s.bind(arr))
这是错误讯息: 类型不匹配无法将原始值分配给对象。
我得到了对象并分配了一个类型为AnyRef的数组。有什么问题?
我该如何处理
答案 0 :(得分:0)
这种情况正在发生,因为从java.lang.Integer到Int发生了隐式转换。 Int是AnyVal类型而不是AnyRef。尝试使用Array [Any]而不是Array [AnyRef]或者您可以通过import scala.Predef.{Integer2int => _}
// This method in Predef.scala is causing the conversion
implicit def Integer2int(x: java.lang.Integer): Int
答案 1 :(得分:0)
这是因为AnyRef
用于对象,AnyVal
用于基元。您可以在案例中使用Array[Any]
:
var s: PreparedStatement = session.prepare("insert into test_person (name, age, point) values (?, ?, ?)");
var r: Row = session.execute("select * from customer").one()
val arr = Array(r.getString("name"), r.getInt("age"), r.getInt("point"))