【发布时间】:2019-12-08 14:59:23
【问题描述】:
我有如下表结构
@Table(value = "employee")
public class Employee implements MapIdentifiable{
@PrimaryKeyColumn(value = "employee_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED)
private String empId;
@Column(value="info")
@CassandraType(type = DataType.Name.UDT, userTypeName = "emp_info")
private EmployeeInfo info;
// getters & setters
}
@UserDefinedType(value = "emp_info")
public class EmployeeInfo {
@CassandraType(type = DataType.Name.TEXT, userTypeName = "employee_name")
private String employeeName
// getters & setters
}
每当我尝试执行repository.save(emp) 时,都会收到以下错误IllegalArgumentException: employeename is not a field defined in this UDT.。
我的代码或数据库中没有引用任何名为“employeename”的字段,但出现上述错误。
我尝试过重新创建整个架构和表,但没有成功。
我的maven依赖如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-cassandra</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.7.1</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
<version>3.7.1</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-extras</artifactId>
<version>3.7.1</version>
</dependency>
如果我从字段名称中删除下划线,则相同的代码可以工作。我无法弄清楚我的代码在我的字段名称中没有使用下划线。
如果我遗漏了任何要分享的信息,请告诉我。
我的堆栈跟踪,
java.lang.IllegalArgumentException: employeename is not a field defined in this UDT
web_1 | at com.datastax.driver.core.UDTValue.getAllIndexesOf(UDTValue.java:47)
web_1 | at com.datastax.driver.core.AbstractData.set(AbstractData.java:535)
web_1 | at org.springframework.data.cassandra.core.convert.MappingCassandraConverter.writeUDTValueWhereFromObject(MappingCassandraConverter.java:495)
web_1 | at org.springframework.data.cassandra.core.convert.MappingCassandraConverter.write(MappingCassandraConverter.java:353)
web_1 | at org.springframework.data.cassandra.core.convert.MappingCassandraConverter.getWriteValue(MappingCassandraConverter.java:769)
web_1 | at org.springframework.data.cassandra.core.convert.MappingCassandraConverter.getWriteValue(MappingCassandraConverter.java:711)
web_1 | at org.springframework.data.cassandra.core.convert.MappingCassandraConverter.writeMapFromWrapper(MappingCassandraConverter.java:368)
web_1 | at org.springframework.data.cassandra.core.convert.MappingCassandraConverter.write(MappingCassandraConverter.java:343)
web_1 | at org.springframework.data.cassandra.repository.support.InsertUtil.createInsert(InsertUtil.java:52)
web_1 | at org.springframework.data.cassandra.repository.support.SimpleCassandraRepository.createInsert(SimpleCassandraRepository.java:110)
web_1 | at org.springframework.data.cassandra.repository.support.SimpleCassandraRepository.save(SimpleCassandraRepository.java:77)
web_1 | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
web_1 | at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
web_1 | at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
web_1 | at java.lang.reflect.Method.invoke(Method.java:498)
web_1 | at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:377)
web_1 | at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:200)
web_1 | at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:641)
web_1 | at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
web_1 | at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:605)
web_1 | at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:590)
web_1 | at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
web_1 | at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:59)
web_1 | at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
web_1 | at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
web_1 | at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
web_1 | at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:61)
web_1 | at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
web_1 | at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
web_1 | at com.sun.proxy.$Proxy136.save(Unknown Source)
web_1 | at com.hindol.service.EmployeeServiceImpl.createEmployee(EmployeeServiceImpl.java:31)
web_1 | at com.hindol.EmployeeController.saveEmployee(EmployeeController.java:72)
【问题讨论】:
-
你能附上堆栈跟踪吗?
-
当然。添加了我的堆栈跟踪。
标签: cassandra spring-data-jpa spring-data-cassandra