Cassandra Java Driver BoundStatement.setList 也适用于 set

Cassandra Java Driver BoundStatement.setList works for set as well

我有一个 table 用户集

create table IF NOT EXISTS userset (id int primary key, name set, phone set, emails list);

现在我正在通过 datastax java 驱动程序执行插入语句:cassandra-driver-core-3.1.0.jar。现在我有一个 java.util.List 的字符串说 listString

List<String> listString = new ArrayList<String>();
listString.add("NewName");
boundStatement.setList(1, listString);

这里的boundStatement是com.datastax.driver.core.BoundStatement的一个实例。在索引 1 上,我在用户集中设置名称的值。

即使设置了名称的后端类型并且我使用的是 BoundStatement-> setList,它仍然可以毫无错误地执行并正确输入名称中的值。这是 datastax 驱动程序中 BoundStatement 的功能吗?

当我尝试为在后端服务器中设置的参数设置列表时,为什么它没有抛出错误?

你可以说这是 datastax 驱动程序中的错误。

当您使用 boundStatement.setListboundStatement.setSet 绑定数据时,这两种方法都使用 lookupCodec 方法来查找具有列类型的编解码器并且不验证值。

但是如果你使用 statement.bind 绑定数据,它会使用 findCodec 方法找到具有列类型的编解码器并使用给定值

进行验证
if ((cqlType == null || cqlType.getName() == LIST) && value instanceof List) {
    //...........
}

if ((cqlType == null || cqlType.getName() == SET) && value instanceof Set) {
   //............
}