L'objet info-utilisateur suivant est mappé à une table "user_info" dans mon espace de clé "data_collection". J'ai créé la table "user_info" dans ma base de données cassandra. J'utilise le cassandra de données de ressort pour se relier à la base de données de cassandra de JAVA et aux annotations de ressort comme ci-dessous.erreur de colonne column non configurée pendant l'insertion
@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;
}
}
J'utilise le code suivant pour insérer un enregistrement dans ma table "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);
}
}
Mon selectOne fonctionne correctement alors que pendant insert je reçois l'exception suivante. J'ai clairement mappé la classe UserInfo.java au nom de la table "user_info" en utilisant l'annotation ci-dessus. Je ne sais pas pourquoi l'insertion essaye d'arriver à la table "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)
S'il vous plaît trouverez ci-dessous la description de la table cassandra.
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'};
mise à jour rapide: Je sauver essayé une autre classe Test.java. Il a été mappé à une table "test_info". Je suis l'erreur suivante
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)
Je me demande si mon nom de classe Java et le nom de la table dans cassandra doit toujours être le même. Parce qu'il cherche la colonne column "test" au lieu de "test_info" que j'ai spécifié dans l'annotation @Table.
Ci-dessous la description de mon keyspace
CREATE KEYSPACE data_collection WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': '3'
};
EDIT - RESOLU: J'ai trouvé la solution basée sur la conversation avec @pinkpanther. J'avais importé com.datastax.driver.mapping.annotations.Table au lieu de org.springframework.data.cassandra.mapping.Table, ce qui explique pourquoi il n'a pas respecté le mappage de nom de table. Merci de votre aide.
Essayez votre requête avec cqlsh et vérifiez si la table existe, assurez-vous également que vous êtes connecté au bon point de contact et à l'espace –
Spring Data pour Apache Cassandra n'est pas ORM ... il n'y a pas de relations dans Cassandra mappeur d'objet. – mp911de
@AshrafulIslam Ma requête dans cqlsh fonctionne correctement. Et même à travers Java mon fetch fonctionne comme prévu sans aucune erreur. Je ne suis pas sûr si c'est à cause de l'objet select où je spécifie explicitement le nom de la table, mais cela fonctionne. J'ai un problème seulement pendant l'insertion. Et oui, je suis connecté à l'espace de touches correct. – lazytc