2017-09-13 27 views
1

私のキースペース "data_collection"のテーブル "user_info"に次のユーザー情報オブジェクトがマップされています。私は自分のcassandraデータベースに "user_info"テーブルを作成しました。私はJAVAからのcassandraデータベースとspringアノテーションとの接続に以下のようにspringデータcassandraを使用しています。挿入中に列挙されていないエラーが発生しました

@Table(name="user_info",keyspace="data_collection", caseSensitiveKeyspace = false,caseSensitiveTable = false) 

public class UserInfo { 
    @PartitionKey 
    private UUID id; 

    @PrimaryKeyColumn 
    private String email; 

    private int phone; 

    private String name; 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getEmail() { 
     return email; 
    } 
    public void setEmail(String email) { 
     this.email = email; 
    } 
    public int getPhone() { 
     return phone; 
    } 
    public void setPhone(int phone) { 
     this.phone = phone; 
    } 
} 

私は私の「USER_INFO」テーブルにレコードを挿入するには、次のコードを使用しています。

@Autowired 
    CassandraTemplate cassandraTemplate; 

    public void saveUserInfo(UserInfo userInfo){ 
     logger.debug("userInfo "+new Gson().toJson(userInfo)); 
     String email = userInfo.getEmail(); 
     Select select = QueryBuilder.select().from("user_info"); 
     select.where(QueryBuilder.eq("email", email)); 
     logger.debug("Query "+select.toString()); 
     UserInfo existingUser = cassandraTemplate.selectOne(select, UserInfo.class); 
     if(existingUser!=null){ 
      cassandraTemplate.update(userInfo); 
     } 
     else{ 
      cassandraTemplate.insert(userInfo); 
     } 

    } 

私selectOneは、挿入時に、私は次の例外を取得しています一方、正常に動作しています。上記の注釈を使用して、UserInfo.javaクラスをテーブル名 "user_info"にマップしています。なぜ私は挿入がテーブル "userinfo"に起こそうとしているのか分かりません。

org.springframework.cassandra.support.exception.CassandraInvalidQueryException: unconfigured columnfamily userinfo; nested exception is com.datastax.driver.core.exceptions.InvalidQueryException: unconfigured columnfamily userinfo 
    at org.springframework.cassandra.support.CassandraExceptionTranslator.translateExceptionIfPossible(CassandraExceptionTranslator.java:128) 
    at org.springframework.cassandra.core.CqlTemplate.potentiallyConvertRuntimeException(CqlTemplate.java:946) 
    at org.springframework.cassandra.core.CqlTemplate.translateExceptionIfPossible(CqlTemplate.java:930) 
    at org.springframework.cassandra.core.CqlTemplate.translateExceptionIfPossible(CqlTemplate.java:912) 
    at org.springframework.cassandra.core.CqlTemplate.doExecute(CqlTemplate.java:278) 
    at org.springframework.cassandra.core.CqlTemplate.doExecute(CqlTemplate.java:559) 
    at org.springframework.cassandra.core.CqlTemplate.execute(CqlTemplate.java:1333) 
    at org.springframework.data.cassandra.core.CassandraTemplate.doUpdate(CassandraTemplate.java:895) 
    at org.springframework.data.cassandra.core.CassandraTemplate.update(CassandraTemplate.java:537) 
    at org.springframework.data.cassandra.core.CassandraTemplate.update(CassandraTemplate.java:532) 

カサンドラの表の説明の下に見つけてください。

CREATE TABLE user_info (
    name text, 
    email text, 
    phone int 
    PRIMARY KEY ((email)) 
) WITH 
    bloom_filter_fp_chance=0.010000 AND 
    caching='KEYS_ONLY' AND 
    comment='' AND 
    dclocal_read_repair_chance=0.100000 AND 
    gc_grace_seconds=864000 AND 
    index_interval=128 AND 
    read_repair_chance=0.000000 AND 
    replicate_on_write='true' AND 
    populate_io_cache_on_flush='false' AND 
    default_time_to_live=0 AND 
    speculative_retry='99.0PERCENTILE' AND 
    memtable_flush_period_in_ms=0 AND 
    compaction={'class': 'SizeTieredCompactionStrategy'} AND 
    compression={'sstable_compression': 'LZ4Compressor'}; 

クイックアップデート:私はちょうど別のクラスTest.javaを保存しようとしました。それはテーブル "test_info"にマップされました。次のエラーが発生しました

org.springframework.cassandra.support.exception.CassandraInvalidQueryException: unconfigured columnfamily test; nested exception is com.datastax.driver.core.exceptions.InvalidQueryException: unconfigured columnfamily test 
at org.springframework.cassandra.support.CassandraExceptionTranslator.translateExceptionIfPossible(CassandraExceptionTranslator.java:128) 
at org.springframework.cassandra.core.CqlTemplate.potentiallyConvertRuntimeException(CqlTemplate.java:946) 
at org.springframework.cassandra.core.CqlTemplate.translateExceptionIfPossible(CqlTemplate.java:930) 
at org.springframework.cassandra.core.CqlTemplate.translateExceptionIfPossible(CqlTemplate.java:912) 
at org.springframework.cassandra.core.CqlTemplate.doExecute(CqlTemplate.java:278) 
at org.springframework.cassandra.core.CqlTemplate.doExecute(CqlTemplate.java:559) 
at org.springframework.cassandra.core.CqlTemplate.execute(CqlTemplate.java:1323) 
at org.springframework.data.cassandra.core.CassandraTemplate.doInsert(CassandraTemplate.java:708) 
at org.springframework.data.cassandra.core.CassandraTemplate.insert(CassandraTemplate.java:290) 
at org.springframework.data.cassandra.core.CassandraTemplate.insert(CassandraTemplate.java:285) 

Javaクラス名とcassandraのテーブル名が常に同じであるかどうかは疑問です。 @tableアノテーションで指定した "test_info"の代わりに "test"を探しているからです。以下は

私の鍵空間

CREATE KEYSPACE data_collection WITH replication = { 
    'class': 'SimpleStrategy', 
    'replication_factor': '3' 
}; 

EDITの説明である - 解決しよう:私は@pinkpantherとの会話に基づいて解決策を見つけた 。 org.springframework.data.cassandra.mapping.Tableの代わりにcom.datastax.driver.mapping.annotations.Tableをインポートしましたが、これはテーブル名のマッピングを尊重しなかったからです。ご協力いただきありがとうございます。

+0

cqlshを使用してクエリを実行し、テーブルが存在するかどうかを確認し、正しいコンタクトポイントとキースペースに接続していることを確認してください。 –

+0

Apache CassandraのSpringデータはORMではありません... Cassandraでは本質的に関係がないので、オブジェクトマッパー。 – mp911de

+0

@AshrafulIslam cqlshのクエリがうまく動作します。そしてJavaを介しても、私のフェッチは何のエラーもなく期待通りに動いています。私は明示的にテーブル名を指定する選択オブジェクトのためにそのことが分かりませんが、それは機能します。私は挿入中にのみ問題があります。はい、私は正しいキースペースに接続しています。 – lazytc

答えて

0

表のパッケージインポートに問題がある可能性があります。スプリングデータカサンドラにはorg.springframework.data.cassandra.mapping.Tableが必要です。インポートしたcom.datastax.driver.mapping.annotations.Tableをそれに置き換えます。

関連する問題