【发布时间】:2017-09-04 18:06:47
【问题描述】:
我一直在尝试测试 Cassandra UDT 的插入,但一直遇到以下错误: 线程“main”java.lang.IllegalArgumentException 中的异常:UserTypeResolver 不能为空
在尝试了自己的方法之后,我尝试完全复制以下概述的方法: User Defined Type with spring-data-cassandra
但是,我仍然遇到同样的错误。
当我删除 UDT 并插入简单类型时,我能够插入到目标数据库,所以我知道我正在正确连接。我的配置如下:
@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());
}
}
我的 Address 和 Employee 类与我上面引用的 SO 问题完全一样,我的 Main 很简单:
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");
}
}
我正在使用:
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
上一个 SO 问题中引用的版本是 1.5.0,尽管 spring.io 将 1.5.1 列为当前版本,所以我正在使用它,但没有显示可用的 1.5.0。
任何帮助将不胜感激,因为这让我有些发疯。
【问题讨论】:
-
你需要用
Session和CassandraConverter构造CassandraTemplate。 -
谢谢,我是 Spring 新手,所以您的评论帮助我朝着正确的方向前进。想通了。
-
@TBlank 你能发布你的解决方案吗?
标签: user-defined-types spring-data-cassandra