无法在jooq插入中设置UDT,始终获得StackOverflowError

时间:2017-07-05 14:43:19

标签: postgresql jooq

SQL非常简单:

CREATE TYPE audit_fields AS (
    creation_time_ms BIGINT
);

CREATE TABLE users(
    ...
    audit AUDIT_FIELDS NOT NULL
);

这是我试图这样做的两种方式:

UsersRecord getRecord() {
    return new UsersRecord()
        .setSomeField(...)
        .setOtherField(...)
        .setAudit(new AuditFieldsRecord(System.currentTimeMillis()));
}

create.insertInto(Tables.USERS)
    .set(getRecord())
    .execute();

而且,这个:

create.insertInto(Tables.USERS)
    .set(getRecord())
    .set(Tables.USERS.AUDIT, new AuditFieldsRecord(System.currentTimemillis()))
    .execute();

我只是得到一个StackOverflowError,其中以下块重复(显然是无限递归):

at org.jooq.impl.UDTConstant.<init>(UDTConstant.java:62)
at org.jooq.impl.DSL.val(DSL.java:12781)
at org.jooq.impl.DSL.val(DSL.java:12732)
at org.jooq.impl.DSL.inline(DSL.java:12590)
at org.jooq.impl.UDTRecordImpl.toString(UDTRecordImpl.java:141)
at java.lang.String.valueOf(String.java:2994)
at org.jooq.impl.AbstractParam.name(AbstractParam.java:104)
at org.jooq.impl.AbstractParam.<init>(AbstractParam.java:78)
at org.jooq.impl.AbstractParam.<init>(AbstractParam.java:74)
at org.jooq.impl.UDTConstant.<init>(UDTConstant.java:62)
at org.jooq.impl.DSL.val(DSL.java:12781)
at org.jooq.impl.DSL.val(DSL.java:12732)
at org.jooq.impl.DSL.inline(DSL.java:12590)
at org.jooq.impl.UDTRecordImpl.toString(UDTRecordImpl.java:141)
at java.lang.String.valueOf(String.java:2994)
at org.jooq.impl.AbstractParam.name(AbstractParam.java:104)
at org.jooq.impl.AbstractParam.<init>(AbstractParam.java:78)
at org.jooq.impl.AbstractParam.<init>(AbstractParam.java:74)
at org.jooq.impl.UDTConstant.<init>(UDTConstant.java:62)
at org.jooq.impl.DSL.val(DSL.java:12781)
at org.jooq.impl.DSL.val(DSL.java:12732)
at org.jooq.impl.DSL.inline(DSL.java:12590)
at org.jooq.impl.UDTRecordImpl.toString(UDTRecordImpl.java:141)
at java.lang.String.valueOf(String.java:2994)
at org.jooq.impl.AbstractParam.name(AbstractParam.java:104)
at org.jooq.impl.AbstractParam.<init>(AbstractParam.java:78)
at org.jooq.impl.AbstractParam.<init>(AbstractParam.java:74)
at org.jooq.impl.UDTConstant.<init>(UDTConstant.java:62)

知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

这是旧版Jooq 3.7.0中存在的问题。对于使用该版本且无法轻松迁移到较新版本的项目,此问题可能是一个起点,因此我不投票关闭它(如果他们认为合适,还会请求其他人)。

升级到更高版本的jooq可以解决此问题。