如何在从jOOQ生成代码时获取@Size中的minLength?

时间:2017-12-29 11:30:50

标签: jooq

谷歌让我失望......

需要执行哪些步骤,以便jOOQ代码生成不仅会在@Size验证注释上设置(max = nnn),还会设置(min = nn)?在Postgres上设置CHECK并不能解决问题。

1 个答案:

答案 0 :(得分:1)

实际上没有一种可靠的方法可以在SQL中指定varchar数据类型的最小长度,这可以由客户端(如jOOQ的代码生成器)获取。当然,您可以按如下方式定义检查约束:

CHECK (LENGTH (my_column) BETWEEN 10 AND 20)

但是为了弄清楚这个检查约束的语义,jOOQ需要解析SQL字符串并识别各种内置函数和表达式。例如。以下检查约束等同于上述:

CHECK (LENGTH (my_column) + 1 BETWEEN 11 AND 3 * 7)

然后,使用@Size验证注释无法表达微妙的变体,例如:

CHECK (LENGTH (TRIM (my_column)) BETWEEN 10 AND 20)

甚至

CHECK (LENGTH (my_column) + LENGTH (my_other_column) BETWEEN 10 AND 20)

当然,您可以将一些规则硬编码到您自己的自定义代码生成器扩展中。代码生成器具有可用的检查约束信息,您可以挂钩调用的方法来生成这些注释,因此这肯定适用于您的特定情况。