无法使用jooq在Postgres中调用pg_advisory_lock函数

时间:2016-08-31 21:26:40

标签: java jooq

我正在尝试使用JOOQ调用管理函数pg_catalog.pg_advisory_unlock。我可以在gradle构建文件中生成该函数的模型:

schemata {
    schema {
        inputSchema = "public"
    }
    schema {
        inputSchema = "pg_catalog"
    }
    includes = "public.*|pg_catalog.pg_advisory_lock"
}

文件pg_catalog>Routines.java有一个方法public static void pgAdvisoryLock1(Configuration configuration, Long __1)我称之为:

Connection connection = DatabaseService.getInstance().getConnection("sampleUser");
    Settings settings = new Settings()
        .withRenderMapping(new RenderMapping()
            .withSchemata(
                new MappedSchema().withInput("shard_0")
                    .withOutput("shard_1")));
    DSLContext create = DSL.using(connection, settings);

    Long param = 1l;
    pgAdvisoryLock1(create.configuration(), param);

我收到错误:

Exception in thread "main" org.jooq.exception.DataAccessException: SQL [select * from "pg_catalog"."pg_advisory_lock"("_1" := ?)]; ERROR: function pg_catalog.pg_advisory_lock(_1 => bigint) does not exist
  Hint: No function matches the given name and argument types. You might need to add explicit type casts.

非常感谢任何帮助。谢谢!

编辑:考虑一下,我想我记得在某些地方看到JOOQ在postgres函数中遇到了非命名参数的问题。想知道这是否与此有关。由于它是一个管理内置函数,我无法将非命名参数更改为命名参数。我正在使用JOOQ的3.6.2版本(主要是因为我正在使用这个gradle插件(https://github.com/etiennestuder/gradle-jooq-plugin)我正在使用那个版本的JOOQ。不确定JOOQ的新版本是否已修复。

1 个答案:

答案 0 :(得分:0)

事实上,此问题已得到解决。

此插件中针对特定jOOQ版本的硬连线依赖是一个已知问题(https://github.com/etiennestuder/gradle-jooq-plugin/pull/14),我希望很快就会修复。