Ich habe versucht, eine Einfügung von einer Cassandra UDT zu testen, und ich laufe weiterhin in den folgenden Fehler: Ausnahme im Thread "main" java.lang.IllegalArgumentException: UserTypeResolver darf nicht null seinUserTypeResolver darf nicht null sein
nach nur versucht, meinen eigenen Weg durch, um einen Reim, ich versuchte genau den Ansatz in dem folgenden skizzierten zu replizieren: User Defined Type with spring-data-cassandra
aber ich bekomme immer noch den gleichen Fehler.
Ich bin in der Lage, in die Ziel-DB einfügen, wenn ich die UDT entfernen und einfach die einfachen Typen einfügen, damit ich weiß, dass ich richtig verbinde. Meine Konfiguration ist wie folgt:
@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());
}
}
Meine Adresse und Mitarbeiterklassen sind genau wie in der Frage IREFERENZ oben SO gezeigt, und mein Haupt ist einfach:
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");
}
}
Ich verwende:
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
Die Version, auf die in der vorherigen SO-Frage verwiesen wird, ist 1.5.0, obwohl spring.io 1.5.1 als aktuell auflistet, also verwende ich das, und keine 1.5.0 wird als verfügbar angezeigt.
Jede Hilfe wäre willkommen, da dies mich etwas verrückt macht.
Sie müssen 'CassandraTemplate' mit' Session' und 'CassandraConverter' konstruieren. – mp911de
Danke, ich bin neu in Spring, also hat mir dein Kommentar geholfen, in die richtige Richtung zu gehen. Habe es herausgefunden. – TBlank
@TBlank Kannst du bitte deine Lösung veröffentlichen? – TechEnthusiast