【发布时间】:2018-12-06 18:11:54
【问题描述】:
我的问题与Using UUID PK or FK in Firebird with Jooq中提到的问题非常接近
设置: Jaybird 3.0.5、火鸟 2.5.7、jOOQ 3.11.7、JDK 1.8
我的 PK 和 FK 字段,例如
ID CHAR(16) CHARACTER SET OCTETS NOT NULL
和
TABLE_ID CHAR(16) CHARACTER SET OCTETS
我想在生成的类中使用 UUID 作为 java 数据类型
我在配置中使用 JDBC 连接
<jdbc>
<driver>org.firebirdsql.jdbc.FBDriver</driver>
<url>jdbc:firebirdsql:localhost:c:/DBS/DB.FDB?octetsAsBytes=true</url>
<properties>
<property>
<key>user</key>
<value>SYSDBA</value>
</property>
<property>
<key>password</key>
<value>masterkey</value>
</property>
</properties>
</jdbc>
我已经在生成器中设置了forcedType,比如
<forcedType>
<userType>java.util.UUID</userType>
<binding>com.ekser.nakkash.icdv.converters.jooq.ByteArray2UUIDBinding</binding>
<expression>.*ID$</expression>
<types>CHAR\(16\)</types>
<nullability>ALL</nullability>
</forcedType>
我有课
class ByteArray2UUIDBinding implements Binding<byte[], UUID>
现在的问题
jOOQ 生成
public final TableField<MyTableRecord, UUID> ID = createField("ID", org.jooq.impl.SQLDataType.CHAR(16).nullable(false), this, "", new ByteArray2UUIDBinding());
问题是SQLDataType.CHAR(16),应该是SQLDataType.BINARY(16)。
jOOQ 将我的 char(16) octets 字段翻译为字符串 (char(16)),它不尊重 octetsAsBytes=true。
我试图把它放在<jdbc> 中的属性中
<jdbc>
<driver>org.firebirdsql.jdbc.FBDriver</driver>
<url>jdbc:firebirdsql:localhost:c:/DBS/DB.FDB</url>
<properties>
<property>
<key>user</key>
<value>SYSDBA</value>
</property>
<property>
<key>password</key>
<value>masterkey</value>
</property>
<property>
<key>octetsAsBytes</key>
<value>true</value>
</property>
</properties>
</jdbc>
结果相同。
怎么了?
我正在考虑暂时在生成的类中对关键字 CHAR(16) -> BINARY(16) 运行搜索和替换,这不是“时尚”。
【问题讨论】: