2017-07-27 5 views
0

私はテーブルのユーザーセットカサンドラのJavaセットのために働くBoundStatement.setListドライバーだけでなく

を持っていませが、ユーザーセット(ID int型主キー、名前のセット、電話機、電子メールのリスト)存在する場合は、テーブルを作成します。

これでdatastax javaドライバ:cassandra-driver-core-3.1.0.jarでinsert文を実行しています。今私は、文字列のjava.util.ListにはlistString

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

ここboundStatementがcom.datastax.driver.core.BoundStatementのインスタンスであると言っています。インデックス1では、私はusersetのnameの値を設定しています。

バックエンド型の名前が設定されていて、BoundStatement-> setListを使用していても、エラーなしで実行され、名前の値が正しく入力されます。これはdatastaxドライバのBoundStatementの機能ですか?

バックエンドサーバーで設定されているパラメータにsetListを設定しようとすると、エラーが発生しないのはなぜですか?

答えて

1

これはdatastaxドライバのバグです。

あなたがboundStatement.setListまたはboundStatement.setSetにデータをバインドすると、両方の方法は、カラム型でコーデックを見つけることlookupCodecメソッドを使用して値を検証しません。

しかし、あなたはデータをバインドするためにstatement.bindを使用する場合は、列タイプとコーデックを見つけることfindCodecメソッドを使用し、それが与えられた値

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

if ((cqlType == null || cqlType.getName() == SET) && value instanceof Set) { 
    //............ 
} 
で検証しています
関連する問題