Datastax 映射器抱怨生成的插入语句中有重复的列
Datastax mapper complains about duplicate columns in generated insert statement
版本:Datastax Java 驱动程序 3.1.4,Cassandra 3.10
考虑以下 table:
create table object_ta
(
objid bigint,
version_date timestamp,
objecttype ascii,
primary key (objid, version_date)
);
和映射 class:
@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;
}
}
为此 class 创建映射器后(mm
是 MappingManager
用于 mykeyspace 上的会话)
final Mapper<ObjectTa> mapper = mm.mapper(ObjectTa.class);
通话中
mapper.save(new ObjectTa(1));
我明白了
Query preparation failed: INSERT INTO mykeyspace.object_ta
(objid,objid,version_date,objecttype) VALUES (?,?,?,?);:
com.datastax.driver.core.exceptions.InvalidQueryException: The column
names contains duplicates at
com.datastax.driver.core.Responses$Error.asException(Responses.java:136)
at
com.datastax.driver.core.SessionManager.apply(SessionManager.java:220)
at
com.datastax.driver.core.SessionManager.apply(SessionManager.java:196)
at
com.google.common.util.concurrent.Futures$ChainingListenableFuture.run(Futures.java:906)
at
com.google.common.util.concurrent.Futures.run(Futures.java:635)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at
io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
at java.lang.Thread.run(Thread.java:745)
我很困惑,为什么在查询中会生成重复的objid
。
提前感谢您对问题的指点。
克莱门斯
版本:Datastax Java 驱动程序 3.1.4,Cassandra 3.10
考虑以下 table:
create table object_ta
(
objid bigint,
version_date timestamp,
objecttype ascii,
primary key (objid, version_date)
);
和映射 class:
@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;
}
}
为此 class 创建映射器后(mm
是 MappingManager
用于 mykeyspace 上的会话)
final Mapper<ObjectTa> mapper = mm.mapper(ObjectTa.class);
通话中
mapper.save(new ObjectTa(1));
我明白了
Query preparation failed: INSERT INTO mykeyspace.object_ta (objid,objid,version_date,objecttype) VALUES (?,?,?,?);: com.datastax.driver.core.exceptions.InvalidQueryException: The column names contains duplicates at com.datastax.driver.core.Responses$Error.asException(Responses.java:136) at com.datastax.driver.core.SessionManager.apply(SessionManager.java:220) at com.datastax.driver.core.SessionManager.apply(SessionManager.java:196) at com.google.common.util.concurrent.Futures$ChainingListenableFuture.run(Futures.java:906) at com.google.common.util.concurrent.Futures.run(Futures.java:635) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137) at java.lang.Thread.run(Thread.java:745)
我很困惑,为什么在查询中会生成重复的objid
。
提前感谢您对问题的指点。
克莱门斯