谷歌让我失望......
需要执行哪些步骤,因此jOOQ代码生成不仅会在@Size验证注释上设置(max = nnn),还会设置(min = nn)?在Postgres上设置CHECK不起作用。
实际上没有一种可靠的方法可以在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)
当然,您可以将一些规则硬编码到您自己的自定义代码生成器扩展中。代码生成器具有可用的检查约束信息,您可以挂钩调用的方法来生成这些注释,因此这肯定适用于您的特定情况。