首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jooq 3.12.0自定义数据类型绑定生成的代码编译错误

jooq 3.12.0自定义数据类型绑定生成的代码编译错误
EN

Stack Overflow用户
提问于 2019-09-03 00:37:39
回答 1查看 859关注 0票数 5

我在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的一部分:

代码语言:javascript
复制
<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>

生成的代码:没有编译错误

代码语言:javascript
复制
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的一部分:

代码语言:javascript
复制
<forcedTypes>
    <forcedType>
        <userType>com.google.gson.JsonElement</userType>
        <binding>com.samplecompany.jooq.MySqlJsonBinding</binding>
        <includeExpression>.*JSON.*</includeExpression>
        <includeTypes>.*</includeTypes>
    </forcedType>
</forcedTypes>

生成的代码:没有编译错误,但没有MySqlJsonBinding:

代码语言:javascript
复制
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的一部分:

代码语言:javascript
复制
<forcedTypes>
    <forcedType>
        <userType>com.google.gson.JsonElement</userType>
        <binding>com.samplecompany.jooq.MySqlJsonBinding</binding>
        <includeExpression>board_data</includeExpression>
        <includeTypes>JSON</includeTypes>
    </forcedType>
</forcedTypes>

生成的代码:

代码语言:javascript
复制
public final TableField<UserBoardRecord, JsonElement> BOARD_DATA = createField(DSL.name("board_data"), org.jooq.impl.SQLDataType.JSON, this, "", new MySqlJsonBinding());

编译以下错误:

代码语言:javascript
复制
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))

你知道我会做错什么吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-09-03 16:49:31

jOOQ 3.12引入了新的org.jooq.JSON类型,它会自动应用于生成的代码。在此之前,无法映射该类型,因此将其生成为对应于java.lang.ObjectSQLDataType.OTHER

您的绑定以前是有效的,因为它可能是一个Binding<Object, YourType>。您必须将此绑定更改为Binding<JSON, YourType>才能修复此问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57760322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档