使用 JOOQ 创建动态主键约束

Create dynamic primary key constraint with JOOQ

我正在使用 JOOQ(JOOQ 中的新手)在我的 spring 引导项目中使用 Rest API 在运行时创建数据库。 在其中一种情况下,我需要创建一个带有复合主键的 table,它可以是多列的组合。 我正在使用下面的代码来创建约束 -

ArrayList<Constraint> constraints = new ArrayList<>();
constraints.add(constraint(name("pk_" + tableName))
.primaryKey(field("column1"), field("column2")));

我已经有 List<Field<?>>,它将用作复合主键。 当主键约束可以支持 n 列时,我怎样才能使它动态化? 有什么方法可以直接在 .primarykey() API?

中提供字段列表

约束 API 中缺少在这种情况下人们可能期望的 primaryKey(Collection<? extends Field<?>>) 的常见重载。我已经为 jOOQ 3.15 创建了一个功能请求:https://github.com/jOOQ/jOOQ/issues/11816

您可以只使用 ConstraintTypeStep.primaryKey(Field<?>...) using standard JDK Collection.toArray() 方法:

List<Field<?>> list = ...

// Pre Java 11
constraints.add(constraint(...).primaryKey(list.toArray(new Field<?>[0])));

// Using new JDK 11 API
constraints.add(constraint(...).primaryKey(list.toArray(Field<?>[]::new)));