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

使用h2和jooq的异常

商琛
2023-03-14

我有一个列类型为text[]的表。

我正在使用dsl和jooq以及H2。该表包含字符串值数组,如下所示:

+-------------+
|column_name  |
+-------------+
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
|[str1, str2] |
+-------------+

Table是使用jooq生成的java类。当我执行以下查询并打印结果时:

 println(
        dsl
          .select(Table.column_name)
          .from(Table)
          .fetch())

它把上面的表格数据打印出来。

但是当我执行时:

 println(
        dsl
          .select(arrayAggDistinct(elementAt(Table.column_name, 1)))
          .from(Table)
          .fetch())

它给我一个例外:

o]   Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "db.Table.column_name" not found; SQL statement:
[info] select array_agg(distinct "db"."Table"."column_table"[1]) from db.Table [42122-200]
[info]   at org.h2.message.DbException.getJdbcSQLException(DbException.java:453)
[info]   at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
[info]   at org.h2.message.DbException.get(DbException.java:205)
[info]   at org.h2.message.DbException.get(DbException.java:181)
[info]   at org.h2.expression.ExpressionColumn.getColumnException(ExpressionColumn.java:163)
[info]   at org.h2.expression.ExpressionColumn.optimize(ExpressionColumn.java:145)
[info]   at org.h2.expression.function.Function.optimize(Function.java:2594)
[info]   at org.h2.expression.aggregate.AbstractAggregate.optimize(AbstractAggregate.java:92)
[info]   at org.h2.expression.aggregate.Aggregate.optimize(Aggregate.java:705)
[info]   at org.h2.command.dml.Select.prepare(Select.java:1206)

它执行正常PostgreSQL,但给我错误在这个查询与H2。

我如何让它与H2一起工作?

共有1个答案

麹耘豪
2023-03-14

请查看DSL的@Support注释。ArrayAgDistinct()。从jOOQ 3.13开始,它包括以下方言:

  • 极光博士后

在不久的将来,H2将支持更多符合标准的ARRAY类型,这些类型更像PostgreSQL:https://github.com/h2database/h2database/issues/2190

届时,jOOQ还将增加对H2阵列和阵列函数的更多支持:https://github.com/jOOQ/jOOQ/issues/10175,但现在,您无法在H2上使用此功能。

 类似资料:
  • 问题内容: 我目前正在尝试从jpa实体生成jooq类,而不是使用现有的数据库。 跟随此页面并使用jooq版本3.9.1,我当前的pom插件部分如下所示 当运行maven软件包时,这确实会成功,但是不会生成预期的jooq类。构建的堆栈跟踪显示: 问题答案: 您的实体可能与放置插件的位置位于同一模块中。这意味着jOOQ代码生成器在编译模块之前被调用,这意味着当jOOQ代码生成器尝试查找带有JPA注释的

  • 问题内容: 我正在尝试为H2导入一个SQL脚本。该脚本由spring- batch提供,用于存储作业元数据。当我直接在H2控制台中执行此脚本时,没有语法错误,但是我在初始化阶段引用了Hibernate / JPA中要导入的相同脚本,却遇到了以下异常: 这是我要执行的脚本:https : //code.google.com/p/joshlong- examples/source/browse/tru

  • 我是ORM的忠实粉丝,特别是当涉及到。NET和实体框架时,使用LINQ使您的数据访问不那么乏味,更令人愉快。 然而,我目前正在研究Java,尤其是ORMS。我在SQL Server数据库中尝试了nHybernate--由于某些表中没有键(唯一约束),我开始查看Jooq。 不过,我已经设法使用JOOQ(V3.2.0)从SQL Server数据库生成了Java类--并非没有错误。 对于未找到类的异常,

  • 我使用logback MDC来记录我的应用程序不同模块的日志,例如, logback.xml中的mdc配置 我想在不同的日志文件中记录贸易或货物sql日志,所以我想知道JOOQ是否支持这个?

  • 我正在尝试使用redis缓存JOOQ记录结果。但同样是抛出以下错误: 有什么建议可以解决这个问题吗?

  • 我正在尝试使用准备好的语句和TABLE_CATALOG和table_schema的参数来选择默认模式'public'中的所有表。当我创建一个准备好的语句时,系统会返回一个错误,这没有任何意义。如果我指定了TABLE_CATALOG而不指定TABLE_SCHEMA,它可以很好地工作。另外,如果指定TABLE_SCHEMA而不指定TABLE_CATALOG,它也可以正常工作。我是不是做错什么了? 线程