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

无法使用jOOQ写入Postgres数组列

段兴为
2023-03-14

我有一个包含String[]和Time[]数组列的表。从桌子上看书很好。但当我想创造一张唱片的时候...

MyTableRecord r = txJooq.newRecord(MY_TABLE);
r.setId(id);
r.setStringArr("foo", "bar");
r.setTimeArr(LocalTime.of(7, 0), LocalTime.of(10, 0));
r.store();
org.jooq.exception.DataAccessException: SQL [null]; Can't infer the SQL type to use for an instance of [Ljava.lang.String;. Use setObject() with an explicit Types value to specify the type to use.
        at org.jooq_3.9.1.H2.debug(Unknown Source)
        at org.jooq.impl.Tools.translate(Tools.java:1983)
        at org.jooq.impl.AbstractBindContext.bindValue(AbstractBindContext.java:130)
        at org.jooq.impl.Val.accept(Val.java:96)
        at org.jooq.impl.AbstractBindContext.bindInternal(AbstractBindContext.java:257)
        at org.jooq.impl.AbstractBindContext.visit0(AbstractBindContext.java:91)
        at org.jooq.impl.AbstractContext.visit0(AbstractContext.java:402)
        at org.jooq.impl.AbstractContext.visit(AbstractContext.java:168)
        at org.jooq.impl.QueryPartList.accept(QueryPartList.java:104)
        at org.jooq.impl.AbstractBindContext.bindInternal(AbstractBindContext.java:257)
        at org.jooq.impl.AbstractBindContext.visit0(AbstractBindContext.java:91)
        at org.jooq.impl.AbstractContext.visit0(AbstractContext.java:402)
        at org.jooq.impl.AbstractContext.visit(AbstractContext.java:168)
        at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:345)
        at org.jooq.impl.AbstractDelegatingQuery.execute(AbstractDelegatingQuery.java:135)
        at ch.waschenda.backend.web.control.BootstrapController.createLandlord(BootstrapController.java:66)
        at ch.waschenda.backend.web.control.BootstrapController.lambda$bootstrap$0(BootstrapController.java:41)
        at com.github.witoldsz.ultm.internal.ThreadLocalTxManager.lambda$tx$2(ThreadLocalTxManager.java:81)
        at com.github.witoldsz.ultm.internal.ThreadLocalTxManager.txUnwrappedResult(ThreadLocalTxManager.java:55)
        at com.github.witoldsz.ultm.internal.ThreadLocalTxManager.txResult(ThreadLocalTxManager.java:67)
        at com.github.witoldsz.ultm.internal.ThreadLocalTxManager.tx(ThreadLocalTxManager.java:81)
        at ch.waschenda.backend.web.control.BootstrapController.bootstrap(BootstrapController.java:40)
        at ch.waschenda.backend.web.Api.bootstrap(Api.java:67)
        at spark.RouteImpl$1.handle(RouteImpl.java:61)
        at spark.http.matching.Routes.execute(Routes.java:61)
        at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:130)
        at spark.embeddedserver.jetty.JettyHandler.doHandle(JettyHandler.java:50)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
        at org.eclipse.jetty.server.Server.handle(Server.java:517)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
        at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of [Ljava.lang.String;. Use setObject() with an explicit Types value to specify the type to use.
        at org.postgresql.jdbc.PgPreparedStatement.setObject(PgPreparedStatement.java:1051)
        at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.setObject(HikariProxyPreparedStatement.java)
        at org.jooq.tools.jdbc.DefaultPreparedStatement.setObject(DefaultPreparedStatement.java:189)
        at org.jooq.impl.DefaultBinding.set(DefaultBinding.java:1165)
        at org.jooq.impl.DefaultBindContext.bindValue0(DefaultBindContext.java:62)
        at org.jooq.impl.AbstractBindContext.bindValue(AbstractBindContext.java:127)
        ... 38 more
values (
  ...
  ('foo', 'bar'), 
  ...
);
values (
  ...
  '{"foo", "bar"}', 
  ...
);
    null

暂时还没有答案

 类似资料:
  • 在Postgres中,我创建了一个UDT,如下所示 注意:我知道JOOQ在生成类时会生成枚举类型,但这是获取所需信息的唯一方法吗? 谢了!

  • 我有一个名为“test”的表,其中包含Postgres 9.3中json类型的“sample_column”列。我试图使用Spring/JPA将以下内容写入该列:{“name”:“Updated name”} 我在其他帖子上读到,我需要添加一个自定义转换器来将字符串映射到json类型。这是我现在拥有的代码: TestDAO。爪哇: 用于映射json内容的CustomClass: 最后是Conver

  • 我有一个带有jsonb列的PostgreSQL表,其中包含一个字符串数组,这些字符串是标记值,如下所示:。我有一个自定义绑定,用于将JSON与jackson JSONode进行转换。 自定义绑定定义如下:https://gist.github.com/helgeg/0C0B14228F75E91B7542BD6979A05B49 用基本的find读取记录,然后我提取JSON列,如下所示: 这是使用

  • 我有下面的Dockerfile。我试图用--build参数重建图像和docker compose。我看到它经历了包括重新创建证书在内的步骤,但它不会将其写入目录。该目录归root所有,root拥有对其的完全访问权限。我也在运行docker compose。这是/var/lib/docker/volumes上的挂载目录。存在/etc/apache2/certificate目录。我错过了什么?

  • 我有一个PostgreSQL表,其列名为test_interval,类型为interval。 我想把数据插入到表中,数据的形式是: 我得到的错误不能插入类型。如何使用JOOQ插入postgres间隔数据类型的数据?

  • 我正在调查Jooq,发现了一些我几乎找不到文档的东西——没有一个能完全诚实地回答我的问题。 我想做的是在表中有一列,比如permissions Variable bit(2000)(Postgres 9.5) 然而,Jooq对此所做的是将其视为varchar...这显然是不正确的,即使在一代。在这样的事情上,成功的捷径是什么?