2017-02-23 9 views
2

バージョンを文句:Datastax Javaドライバ3.1.4、カサンドラ3.10Datastaxマッパーが生成されたINSERT文で重複する列について

は、次の表を考えてみましょう:

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のセッションのためにMappingManagerですmykeyspace

mapper.save(new ObjectTa(1)); 

を呼び出すことで)

final Mapper<ObjectTa> mapper = mm.mapper(ObjectTa.class); 

私は

クエリの準備が失敗します:INSERT INTOは( (objidは、objidは、version_date、OBJECTTYPE)VALUESをmykeyspace.object_ta、?、? ?、?);: 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) at 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.uti java.lang.Thread.runでl.concurrent.DefaultThreadFactory $ DefaultRunnableDecorator.run(DefaultThreadFactory.java:137) (Thread.java:745)

私は、なぜ重複objid理解するために途方に暮れていますクエリで生成されます。

問題の原因をご指摘いただきありがとうございます。

クレメンスは

答えて

1

私はそれがあると思うので、セッター/ゲッター(getObjId)対フィールド名(objid)上の例一貫性のない使用。 getObjIdsetObjIdgetObjidsetObjidにそれぞれ変更すると、動作する可能性があります。

ドライバマッパーでは、セッター/ゲッターが使用されているかどうか(JAVA-1310)と命名規則(JAVA-1316)を明示することができます。

+0

これは、ゲッターとセッターの名前を、提案したとおりに変更するのに役立ちました。どうもありがとうございました! – Clemens

関連する問題