【问题标题】:json values not supported by jooqjooq 不支持的 json 值
【发布时间】:2021-05-24 18:22:57
【问题描述】:

我正在尝试在 java 中使用 jooq 插入到 books 表中。书籍表有两列 book_id integer,jsonb_column jsonb。然而,最终形成的查询是不正确的。未填充 jsonb 的值。这是我形成的查询。

insert into book (book_id, jsoncolumn) values (902, );

下面是我的java代码。

    Field[] columnNames= new Field[2];
    columnNames[0]=field("book_id");
    columnNames[1]= field("jsoncolumn");
    
    Field[] columnValues= new Field[2];
    columnValues[0]=field("902");
    columnValues[1]=field("{}");
    Query query= create.insertInto(table("book"), 
            columnNames)
            .values(columnValues);
    
    String sql = query.getSQL();
    System.out.println(sql);

如何解决这个问题?

【问题讨论】:

    标签: java postgresql jooq jooq-codegen-maven


    【解决方案1】:

    如果您使用的是代码生成器(我强烈推荐!),那么大多数 jOOQ 都是开箱即用的。您的查询将简单地显示为:

    ctx.insertInto(BOOK, BOOK.BOOK_ID, BOOK.JSONCOLUMN)
       .values(902, JSONB.jsonb("{}"))
       .execute();
    

    如果由于某种原因您无法使用代码生成器,那么您必须手动执行代码生成器为您执行的操作。以下是你犯的错误:

    1. 您没有为字段表达式指定数据类型
    2. 您使用plain SQL templating 定义列的值,而不是bind values

    这是您的代码的固定版本:

    Table<?> book = table(name("book"));
    Field<Long> bookId = field(name("book_id"), SQLDataType.BIGINT);
    Field<JSONB> jsoncolumn = field(name("jsoncolumn"), SQLDataType.JSONB);
    
    ctx.insertInto(book, bookId, jsoncolumn)
       .values(902L, JSONB.jsonb("{}"))
       .execute();
    

    【讨论】:

    • BOO,BOOK.BOOK_ID 到底是什么...是字符串吗?这也给了我编译错误 JSONB.jsonb
    • 代码的固定版本也在 JSONB.jsonb 中为我提供了编译错误。这就是我想要做的 org.jooq.JSONB.jsonb("{}")
    • @Abhishek: “BOO,BOOK.BOOK_ID 到底是什么” - 好吧,我推荐使用代码生成器,所以这是生成的代码。 See here for examples。严重地。如果可以,请使用代码生成器(即,如果您的架构不是动态的)。您将获得更好的 jOOQ 体验,而不仅仅是一个好的体验。 :) “这也给了我编译错误 JSONB.jsonb” - 我假设您使用的是最新版本的 jOOQ。否则,使用JSONB.valueOf(),它的作用相同。
    猜你喜欢
    • 2015-10-23
    • 1970-01-01
    • 2013-08-28
    • 2018-01-08
    • 2016-11-04
    • 2016-10-06
    • 2013-04-10
    • 1970-01-01
    • 2019-08-05
    相关资源
    最近更新 更多