[英]Cannot compile autogenerated JOOQ code because of multiple java errors
[英]jooq 3.12.0 custom data type binding generated code compile errors
我在 3.7.3 中使用了 jooq,现在我要升级到 jooq 3.12.0。 我在生成的代码中看到编译错误。
使用 jooq 3.7.3 版,使用https://www.jooq.org/doc/3.7/manual/code-generation/custom-data-type-bindings/ 。 我可以看到在生成的代码中使用了我的自定义数据绑定类(“MySqlJsonBinding”),并且生成的代码没有出现编译错误。
我的 jooq.xml 的一部分:
<customTypes>
<customType>
<name>JsonElement</name>
<type>com.google.gson.JsonElement</type>
<binding>jooq.MySqlJsonBinding</binding>
</customType>
</customTypes>
<forcedTypes>
<forcedType>
<name>JsonElement</name>
<expression>board_data</expression>
<types>JSON</types>
</forcedType>
</forcedTypes>
生成的代码:没有编译错误
public final TableField<UserBoardRecord, JsonElement> BOARD_DATA = createField("board_data", org.jooq.impl.DefaultDataType.getDefaultDataType("json"), this, "", new MySqlJsonBinding());
使用 jooq 3.12.0 版,以https://www.jooq.org/doc/latest/manual/code-generation/custom-data-type-bindings/为例。 我在生成的代码中没有看到“MySqlJsonBinding”,所以我不确定它是否被包含在内。
我的 jooq.xml 的一部分:
<forcedTypes>
<forcedType>
<userType>com.google.gson.JsonElement</userType>
<binding>com.samplecompany.jooq.MySqlJsonBinding</binding>
<includeExpression>.*JSON.*</includeExpression>
<includeTypes>.*</includeTypes>
</forcedType>
</forcedTypes>
生成的代码:没有编译错误,但没有 MySqlJsonBinding:
public final TableField<UserBoardRecord, JSON> BOARD_DATA = createField(DSL.name("board_data"), org.jooq.impl.SQLDataType.JSON, this, "");
最后,我使用 3.12.0,尝试应用我用于 3.7.3 的方法。 我确实得到了生成的代码,它确实包含 MySqlJsonBinding,但它有编译错误。
我的 jooq.xml 的一部分:
<forcedTypes>
<forcedType>
<userType>com.google.gson.JsonElement</userType>
<binding>com.samplecompany.jooq.MySqlJsonBinding</binding>
<includeExpression>board_data</includeExpression>
<includeTypes>JSON</includeTypes>
</forcedType>
</forcedTypes>
生成的代码:
public final TableField<UserBoardRecord, JsonElement> BOARD_DATA = createField(DSL.name("board_data"), org.jooq.impl.SQLDataType.JSON, this, "", new MySqlJsonBinding());
编译错误如下:
ERROR:
Error:(81, 72) java: no suitable method found for createField(org.jooq.Name,org.jooq.DataType<org.jooq.JSON>,com.samplecompany.domain.data.tables.UserBoard,java.lang.String,com.samplecompany.jooq.MySqlJsonBinding)
method org.jooq.impl.AbstractTable.<R,T>createField(java.lang.String,org.jooq.DataType<T>,org.jooq.Table<R>) is not applicable
(cannot infer type-variable(s) R,T
(actual and formal argument lists differ in length))
method org.jooq.impl.AbstractTable.<R,T>createField(java.lang.String,org.jooq.DataType<T>,org.jooq.Table<R>,java.lang.String) is not applicable
(cannot infer type-variable(s) R,T
(actual and formal argument lists differ in length))
method org.jooq.impl.AbstractTable.<R,T,U>createField(java.lang.String,org.jooq.DataType<T>,org.jooq.Table<R>,java.lang.String,org.jooq.Converter<T,U>) is not applicable
(cannot infer type-variable(s) R,T,U
(argument mismatch; org.jooq.Name cannot be converted to java.lang.String))
method org.jooq.impl.AbstractTable.<R,T,U>createField(java.lang.String,org.jooq.DataType<T>,org.jooq.Table<R>,java.lang.String,org.jooq.Binding<T,U>) is not applicable
(cannot infer type-variable(s) R,T,U
(argument mismatch; org.jooq.Name cannot be converted to java.lang.String))
method org.jooq.impl.AbstractTable.<R,T,X,U>createField(java.lang.String,org.jooq.DataType<T>,org.jooq.Table<R>,java.lang.String,org.jooq.Converter<X,U>,org.jooq.Binding<T,X>) is not applicable
(cannot infer type-variable(s) R,T,X,U
(actual and formal argument lists differ in length))
method org.jooq.impl.AbstractTable.<T>createField(java.lang.String,org.jooq.DataType<T>) is not applicable
(cannot infer type-variable(s) T
(actual and formal argument lists differ in length))
method org.jooq.impl.AbstractTable.<T>createField(java.lang.String,org.jooq.DataType<T>,java.lang.String) is not applicable
(cannot infer type-variable(s) T
(actual and formal argument lists differ in length))
method org.jooq.impl.AbstractTable.<T,U>createField(java.lang.String,org.jooq.DataType<T>,java.lang.String,org.jooq.Converter<T,U>) is not applicable
(cannot infer type-variable(s) T,U
(actual and formal argument lists differ in length))
method org.jooq.impl.AbstractTable.<T,U>createField(java.lang.String,org.jooq.DataType<T>,java.lang.String,org.jooq.Binding<T,U>) is not applicable
(cannot infer type-variable(s) T,U
(actual and formal argument lists differ in length))
method org.jooq.impl.AbstractTable.<T,X,U>createField(java.lang.String,org.jooq.DataType<T>,java.lang.String,org.jooq.Converter<X,U>,org.jooq.Binding<T,X>) is not applicable
(cannot infer type-variable(s) T,X,U
(argument mismatch; org.jooq.Name cannot be converted to java.lang.String))
method org.jooq.impl.AbstractTable.<R,T>createField(org.jooq.Name,org.jooq.DataType<T>,org.jooq.Table<R>) is not applicable
(cannot infer type-variable(s) R,T
(actual and formal argument lists differ in length))
method org.jooq.impl.AbstractTable.<R,T>createField(org.jooq.Name,org.jooq.DataType<T>,org.jooq.Table<R>,java.lang.String) is not applicable
(cannot infer type-variable(s) R,T
(actual and formal argument lists differ in length))
method org.jooq.impl.AbstractTable.<R,T,U>createField(org.jooq.Name,org.jooq.DataType<T>,org.jooq.Table<R>,java.lang.String,org.jooq.Converter<T,U>) is not applicable
(cannot infer type-variable(s) R,T,U
(argument mismatch; com.samplecompany.jooq.MySqlJsonBinding cannot be converted to org.jooq.Converter<T,U>))
method org.jooq.impl.AbstractTable.<R,T,U>createField(org.jooq.Name,org.jooq.DataType<T>,org.jooq.Table<R>,java.lang.String,org.jooq.Binding<T,U>) is not applicable
(inferred type does not conform to equality constraint(s)
inferred: java.lang.Object
equality constraints(s): java.lang.Object,org.jooq.JSON)
method org.jooq.impl.AbstractTable.<R,T,X,U>createField(org.jooq.Name,org.jooq.DataType<T>,org.jooq.Table<R>,java.lang.String,org.jooq.Converter<X,U>,org.jooq.Binding<T,X>) is not applicable
(cannot infer type-variable(s) R,T,X,U
(actual and formal argument lists differ in length))
method org.jooq.impl.AbstractTable.<T>createField(org.jooq.Name,org.jooq.DataType<T>) is not applicable
(cannot infer type-variable(s) T
(actual and formal argument lists differ in length))
method org.jooq.impl.AbstractTable.<T>createField(org.jooq.Name,org.jooq.DataType<T>,java.lang.String) is not applicable
(cannot infer type-variable(s) T
(actual and formal argument lists differ in length))
method org.jooq.impl.AbstractTable.<T,U>createField(org.jooq.Name,org.jooq.DataType<T>,java.lang.String,org.jooq.Converter<T,U>) is not applicable
(cannot infer type-variable(s) T,U
(actual and formal argument lists differ in length))
method org.jooq.impl.AbstractTable.<T,U>createField(org.jooq.Name,org.jooq.DataType<T>,java.lang.String,org.jooq.Binding<T,U>) is not applicable
(cannot infer type-variable(s) T,U
(actual and formal argument lists differ in length))
method org.jooq.impl.AbstractTable.<T,X,U>createField(org.jooq.Name,org.jooq.DataType<T>,java.lang.String,org.jooq.Converter<X,U>,org.jooq.Binding<T,X>) is not applicable
(cannot infer type-variable(s) T,X,U
(argument mismatch; com.samplecompany.domain.data.tables.UserBoard cannot be converted to java.lang.String))
任何想法我可能做错了什么? 谢谢。
jOOQ 3.12 引入了新的org.jooq.JSON
类型,它会自动应用于您生成的代码。 之前,该类型无法映射,因此生成为SQLDataType.OTHER
,对应于java.lang.Object
您的绑定之前有效,因为它可能是Binding<Object, YourType>
。 您必须将此绑定更改为Binding<JSON, YourType>
以解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.