2016-05-18 1 views
1

J'ai le problème stockant le champ de la liste comme champ de ma table dans la base de données de cassandra. J'utilise spring-data-cassandra, version 1.4.1.RELEASE.spring-data-cassandra, Cassandra stockant la liste <Integer> comme champ

Mon modèle contient:

@Column 
@CassandraType(type = DataType.Name.LIST) 
private List<Integer> somedata; 

Je voudrais créer automatiquement mes tables db avec une action SchemaAction.RECREATE_DROP_UNUSED schéma dans ma classe de config:

@Override 
public SchemaAction getSchemaAction() { 
    return SchemaAction.RECREATE_DROP_UNUSED; 
} 

Il essaie de créer la table, mais après exception se produit:

Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: expected 1 of typed arguments for the property 'somedata' type is 'interface java.util.List' in the entity <my class here> 

Répondre

5

Ok, trouvé la solution après avoir creusé dans spring-data-cass andra source:

@CassandraType(type = DataType.Name.LIST, typeArguments = { DataType.Name.FLOAT }) 
private List<Float> position; 

Vous devez ajouter typeArguments pour spécifier DataType de type générique. L'exception mentionnée en question est levée lorsqu'un nombre invalide de ces typesArguments est passé. Dans mon cas, il y avait 0 et 1 est requis.

@L'annotation de colonne s'est avérée inutile ici.

+1

Veuillez noter que les valeurs de type de collection vides sont 'null' car elles sont renvoyées par Cassandra. Par conséquent votre champ 'position' sera' null' aussi bien si la liste n'a pas d'éléments. – mp911de

0

Il n'est pas nécessaire de fournir une annotation CassandraType sur le champ tant que vous utilisez des objets de type primitif ou Wrapper. Suite fonctionne bien pour moi. J'utilise spring-data-cassandra avec la version 1.4.2.RELEASE. Veuillez mettre à jour si vous rencontrez toujours le problème.