簡體   English   中英

jooq 3.12.0 自定義數據類型綁定生成代碼編譯錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM