2016-05-18 3 views
1

Ich habe Problem beim Speichern Feld von Liste als Feld meiner Tabelle in Cassandra-Datenbank.spring-data-cassandra, Cassandra Speichern von Liste <Integer> als Feld

Ich verwende Spring-Data-Cassandra, Version 1.4.1.RELEASE.

Mein Modell enthält:

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

Ich möchte auto meine db Tabellen mit SchemaAction.RECREATE_DROP_UNUSED Schema Aktion in meiner Config-Klasse erstellen:

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

Es wird versucht Tabelle zu erstellen, aber im Anschluss an Ausnahme tritt auf:

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> 

Antwort

5

Ok, gefundene Lösung nach dem Graben in Spring-Data-Cass andra Quelle:

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

Sie müssen typeArguments hinzufügen, um DataType des generischen Typs anzugeben. Die in Frage stehende Ausnahme wird ausgelöst, wenn eine ungültige Anzahl dieser typeArguments übergeben wird. In meinem Fall war 0 und 1 erforderlich.

@Column Annotation wurde hier nicht benötigt.

+1

Bitte beachten Sie, dass die Werte der leeren Sammlungsart 'null' sind, da sie auf diese Weise von Cassandra zurückgegeben werden. Daher wird Ihr Feld "position" auch "null" sein, wenn die Liste keine Elemente enthält. – mp911de

0

Sie müssen keine CassandraType-Annotation über das Feld angeben, solange Sie primitive oder Wrapper-Objekte verwenden. Following funktioniert gut für mich.

@PrimaryKey 
int id; 
String name; 
int num; 
List<Integer> marks; 

Ich verwende Spring-Daten-Cassandra mit Version 1.4.2.RELEASE. Bitte aktualisieren Sie, wenn das Problem weiterhin besteht.

Verwandte Themen