je tente de tester un insert d'un UDT Cassandra, et je continuer à courir dans l'erreur suivante: Exception dans le thread « principal » java.lang.IllegalArgumentException: UserTypeResolver ne doit pas être nulleUserTypeResolver ne doit pas être nul
Après juste essayer de comprendre ma propre chemin à travers, je tenté de reproduire exactement l'approche décrite dans ce qui suit: User Defined Type with spring-data-cassandra
Cependant, je reçois toujours la même erreur.
Je peux insérer dans la base de données cible lorsque je supprime l'UDT et insérez simplement les types simples, donc je sais que je me connecte de manière appropriée. Ma config est la suivante:
@Configuration
@PropertySource(value = { "classpath:cassandra.properties" })
//@EnableCassandraRepositories(basePackages = { "org.spring.cassandra.example.repo" })
public class CassandraConfig {
private static final Logger LOG = LoggerFactory.getLogger(CassandraConfig.class);
@Autowired
private Environment env;
@Bean
public CassandraClusterFactoryBean cluster() {
CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
cluster.setContactPoints(env.getProperty("cassandra.contactpoints"));
cluster.setPort(Integer.parseInt(env.getProperty("cassandra.port")));
return cluster;
}
@Bean
public CassandraMappingContext mappingContext() {
BasicCassandraMappingContext mappingContext = new BasicCassandraMappingContext();
mappingContext.setUserTypeResolver(new SimpleUserTypeResolver(cluster().getObject(), "campaign_management"));
return mappingContext;
}
@Bean
public CassandraConverter converter() {
return new MappingCassandraConverter(mappingContext());
}
@Bean
public CassandraSessionFactoryBean session() throws Exception {
CassandraSessionFactoryBean session = new CassandraSessionFactoryBean();
session.setCluster(cluster().getObject());
session.setKeyspaceName(env.getProperty("cassandra.keyspace"));
session.setConverter(converter());
session.setSchemaAction(SchemaAction.NONE);
return session;
}
@Bean
public CassandraOperations cassandraTemplate() throws Exception {
return new CassandraTemplate(session().getObject());
}
}
Mon adresse et les classes employés sont exactement comme indiqué dans la question SO i référence ci-dessus, et mon principal est tout simplement:
public class MainClass {
public static void main(String[] args) {
ApplicationContext service = new AnnotationConfigApplicationContext(CassandraConfig.class);
Employee employee = new Employee();
employee.setEmployee_id(UUID.randomUUID());
employee.setEmployee_name("Todd");
Address address = new Address();
address.setAddress_type("Home");
address.setId("ToddId");
employee.setAddress(address);
CassandraOperations operations = service.getBean("cassandraTemplate", CassandraOperations.class);
operations.insert(employee);
System.out.println("Done");
}
}
J'utilise:
datastax.cassandra.driver.version=3.1.3
spring.data.cassandra.version=1.5.1
spring.data.commons.version=1.13.1
spring.cql.version=1.5.1
La version référencée dans la question SO précédente est 1.5.0, bien que spring.io liste 1.5.1 comme courant, donc j'utilise cela, et 1.5.0 n'est pas disponible.
Toute aide serait appréciée, car cela me rend un peu fou.
Vous devez construire 'CassandraTemplate' avec' Session' et 'CassandraConverter'. – mp911de
Merci, je suis nouveau au printemps, donc votre commentaire m'a aidé à me pousser dans la bonne direction. Je l'ai compris. – TBlank
@TBlank Pouvez-vous publier votre solution? – TechEnthusiast