Моя проблема очень близка к проблеме, упомянутой в Использование UUID PK или FK в Firebird с Jooq
Настройка: Jaybird 3.0.5, Firebird 2.5.7, jOOQ 3.11.7, JDK1.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>
<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)
в сгенерированных классах, что не является "стильным".