insertinto 中的 JOOQ 序列、设置与值

问题描述 投票:0回答:1

我有一个带有序列的简单表格。 当我在 insertInto .set 方法中使用sequence.nextval() 时,一切都很好。 当我在 insertInto .values 方法中使用sequence.nextval() 仅包含序列时,再次指定一切都很好。 当我在 insertInto .values 方法中使用 sequence.nextval() 且超过序列、specifiend 时,出现错误。

这样就可以了


        int w = dslContext
                .insertInto(APPOINTMENTTYPE)
                .set(APPOINTMENTTYPE.MC, 501559436L)
                .set(APPOINTMENTTYPE.ID, HIBERNATE_SEQUENCE.nextval())
                .set(APPOINTMENTTYPE.NAME, "test name")
                .set(APPOINTMENTTYPE.DESCRIPTION, "test description")
                .set(APPOINTMENTTYPE.BLUE, 255)
                .set(APPOINTMENTTYPE.GREEN, 255)
                .set(APPOINTMENTTYPE.RED, 255)
                .set(APPOINTMENTTYPE.REMINDERINTERVAL, 1)
                .execute();

这个也可以


        int x = dslContext.insertInto(APPOINTMENTTYPE, 
APPOINTMENTTYPE.ID).values(APPOINTMENTTYPE_SEQ.nextval()).execute();

这给出了错误

Cannot resolve method 'values(Field<Long>, int)'


        int y = dslContext.insertInto(APPOINTMENTTYPE, APPOINTMENTTYPE.ID, APPOINTMENTTYPE.BLUE).values(APPOINTMENTTYPE_SEQ.nextval(), 255).execute();

java jooq
1个回答
0
投票

values()
子句只有两组重载:

  • 其中所有参数都是绑定值,即
    values(T1, T2, ...)
  • 所有参数都是表达式,即
    values(Field<T1>, Field<T2>, ...)

如果要支持绑定值和表达式的任意组合,我们很快就会在已经很大的 API 中获得令人望而却步的(指数级!)组合数量。

因此,在您的情况下,您只需显式使用

DSL.val()
包装绑定值。

另请参阅:

这个限制显然不会影响具有固定参数集的方法,例如

set()

© www.soinside.com 2019 - 2024. All rights reserved.