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

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

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

需要执行哪些步骤,因此jOOQ代码生成不仅会在@Size验证注释上设置(max = nnn),还会设置(min = nn)?在Postgres上设置CHECK不起作用。

jooq
1个回答
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)

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

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