我有一个带有序列的简单表格。 当我在 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();
values()
子句只有两组重载:
values(T1, T2, ...)
values(Field<T1>, Field<T2>, ...)
如果要支持绑定值和表达式的任意组合,我们很快就会在已经很大的 API 中获得令人望而却步的(指数级!)组合数量。
因此,在您的情况下,您只需显式使用
DSL.val()
包装绑定值。
另请参阅:
这个限制显然不会影响具有固定参数集的方法,例如
set()