2017-04-16 62 views
1

我正在使用jOOQ 3.9.1并尝试使用UUID字段生成表。如何使用带UUID字段的jOOQ为MySQL生成正确的SQL?

val sql = dsl.createTable("test").column("id", SQLDataType.UUID).column("val", SQLDataType.UUID.length(36).nullable(false)).getSQL() 

预期的结果是:

create table `test`(`id` varchar(36) null, `val` varchar(36) not null) 

但我得到:

create table `test`(`id` varchar null, `val` varchar not null) 

我做错了什么?

回答

0

这是jOOQ 3.9.1的已知问题和早期版本: https://github.com/jOOQ/jOOQ/issues/5807

最简单的解决方法是:

  1. 使用plain SQL此处可用于整个声明
  2. 使用的ExecuteListener修补生成的SQL输出
+1

谢谢@LukasEder。看起来ExecuteListener是保持数据库不可知论的最佳方法--JOOQ的最佳属性。 此方法允许通过在更改前检查方言来更改仅用于特定DB的代码生成。 –