当前位置: 首页 > 知识库问答 >
问题:

Datastax mapper抱怨生成的insert语句中有重复的列

西门正平
2023-03-14

版本: Datastax Java driver 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
{
    @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 html" target="_blank">objectType;
    }

    public void setObjectType(String objectType)
    {
        this.objectType = objectType;
    }
}

为此类创建映射器后(mm是mykeyspace上会话的MappingManager

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

在呼叫时

mapper.save(new ObjectTa(1));

我明白了

查询准备失败:INSERT INTO mykey space . object _ ta(objid,objid,version_date,objecttype)值(?,?,?,?);:com . datas tax . driver . core . exceptions . invalidqueryexception:列名在com . datas tax . driver . core . responses$error . as exception(responses . Java:136)在com . datas tax . driver . core . session manager$4 . apply(session manager . Java:220)在com . datas tax . driver . core . session manager$4 . apply(session manager . Java:196)在com . Google . common . util . concurrent . futures$上

我不明白为什么在查询中生成重复的objid

提前感谢您对问题的指导。

克莱门斯

共有1个答案

翁宜年
2023-03-14

我认为这是因为字段名(Objid)与setter/getters(getObjId)的大小写使用不一致。如果您将getObjIdsetObjId分别重命名为getObjidsetObjid,我相信它可能会起作用。

在未来的版本中,驱动程序映射器将允许用户更明确地了解是否使用setter/getter(JAVA-1310)以及命名约定是什么(JAVA-1316)。

 类似资料:
  • 我正在使用jOOQ生成SQL语句。如何创建insert语句?我可以生成select语句,但无法生成insert语句。我可以创建如下select语句: 如何为insert创建SQL语句

  • 我的问题很简单。我知道UUID的概念,我想生成一个UUID来引用数据库中“存储”中的每个“项目”。看起来很合理,对吧? 问题是以下行返回错误: 我已经阅读了页面:http://www.postgresql.org/docs/current/static/uuid-ossp.html 我在Ubuntu 10.04 x64上运行Postgres 8.4。

  • 我有一个脚本需要在一个语句中插入多个内容,比如 长sql是基于条件串联的,并且需要这么长。在phpmyadmin中使用这种sql语句是有效的,并且插入它没有问题,但是JAVA会吐出一个错误。 我可以做些什么来插入这种sql,或者我应该重做我的代码来启动几次以达到相同的结果吗?

  • 问题内容: 当我这样做时(在laravel中): 它说: SQLSTATE [HY093]:无效的参数号(SQL:SELECT * FROM my_table,其中id =:id || id =:id) 但是当我这样做时(使用纯PHP): 成功了。我究竟做错了什么? PS显然,遇到问题时我运行的查询更有意义。 UPD 或多或少的真实查询: 问题答案: 从我所看到的一切都可以归结为无法处理命名参数。

  • 问题内容: 我在mysql db表中有一个布尔字段。 要获得所有未过时的测试用例的计数,可以像这样简单地完成: 效果很好,但是flake8报告以下警告: E712:与False的比较应为“如果cond为False:”或“如果非cond:” 好吧,我认为这是有道理的。因此,将我的代码更改为此: 要么 但是它们都不起作用。结果始终为0。我认为filter子句不支持运算符“ is”或“ is not”。

  • 问题内容: 这真让我发疯……我在这里做错了什么? 结果是… 02:59:12,885错误[STDERR] com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的“ password” varchar(100)”附近使用 但… 完美运行…直接在M