Cassandra Datastax映射程序抱怨生成的insert语句中存在重复列
版本:Datastax Java驱动程序3.1.4,Cassandra 3.10 考虑下表:Cassandra Datastax映射程序抱怨生成的insert语句中存在重复列,cassandra,datastax,datastax-java-driver,Cassandra,Datastax,Datastax Java Driver,版本:Datastax Java驱动程序3.1.4,Cassandra 3.10 考虑下表: create table object_ta ( objid bigint, version_date timestamp, objecttype ascii, primary key (objid, version_date) ); 和一个映射类: @Table(name = "object_ta") public class ObjectTa {
create table object_ta
(
objid bigint,
version_date timestamp,
objecttype ascii,
primary key (objid, version_date)
);
和一个映射类:
@Table(name = "object_ta")
public class ObjectTa
{
@Column(name = "objid")
private long objid;
@Column(name = "version_date")
private Instant versionDate;
@Column(name = "objecttype")
private String objectType;
public ObjectTa()
{
}
public ObjectTa(long objid)
{
this.objid = objid;
this.versionDate = Instant.now();
}
public long getObjId()
{
return objid;
}
public void setObjId(long objid)
{
this.objid = objid;
}
public Instant getVersionDate()
{
return versionDate;
}
public void setVersionDate(Instant versionDate)
{
this.versionDate = versionDate;
}
public String getObjectType()
{
return objectType;
}
public void setObjectType(String objectType)
{
this.objectType = objectType;
}
}
为此类创建映射器后(mm
是mykeyspace上会话的MappingManager
)
我明白了
查询准备失败:插入mykeyspace.object\u ta
(objid,objid,version_date,objecttype)值(?,,,?);:
com.datastax.driver.core.exceptions.InvalidQueryException:列
名称中包含重复项
com.datastax.driver.core.Responses$Error.asException(Responses.java:136)
在
com.datastax.driver.core.SessionManager$4.apply(SessionManager.java:220)
在
com.datastax.driver.core.SessionManager$4.apply(SessionManager.java:196)
在
com.google.common.util.concurrent.Futures$ChainingListenableFuture.run(Futures.java:906)
在
com.google.common.util.concurrent.Futures$1$1.run(Futures.java:635)
在
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
在
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
在
io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
运行(Thread.java:745)
我无法理解为什么在查询中生成重复的objid
提前感谢您对问题的指点
Clemens我认为这是因为字段名(
objid
)与setter/getter(getObjId
)不一致地使用case。如果将getObjId
和setObjId
分别重命名为getObjId
和setObjId
,我相信这可能会奏效
在未来的版本中,驱动程序映射器将允许用户更明确地了解是否使用setter/getter(),以及命名约定是什么()。这很有帮助,在重命名getter和setter以匹配您建议的情况后,它会起作用。非常感谢你!
final Mapper<ObjectTa> mapper = mm.mapper(ObjectTa.class);
mapper.save(new ObjectTa(1));