簡體   English   中英

將字符串映射到枚舉 jooq

[英]Mapping String to enum jooq

有沒有一種直接的方法可以將 MySQL 中的字段映射到 JOOQ 中的枚舉? 該字段是USER_STATUS ,可能的值由

public enum Status {
  ACTIVE, INACTIVE, SUSPENDED
}

我嘗試使用forcedType:

<forcedType>
    <userType>com.mycompany.Status</userType>
    <expressions>USER_STATUS</expressions>
</forcedType>

但是,這不會觸發生成的代碼中的任何更改。 我嘗試了小寫和大寫,在列名 (user_status) 前加前綴和后綴“.*”。 似乎沒有任何效果。 我究竟做錯了什么?

謝謝!

<forcedType/>元素有多種操作模式,每種模式都需要一個額外的子元素:

數據類型重寫

在這種情況下,您需要一個<name/>元素來將USER_STATUS列映射到另一種數據類型。 但是,這不適用於枚舉類型。

應用轉換器或綁定

將數據庫類型映射到您自己的<userType/>一種方法是應用<converter> (即org.jooq.Converter )或<binding/> (即org.jooq.Binding )。 使用這種方法可以完全控制數據庫類型和用戶類型之間的轉換。 您也可以為此使用內置的org.jooq.impl.EnumConverter

EnumConverter適用於序數映射和 1:1 字符串到java.lang.Enum.name()映射。 如果您在數據庫中的枚舉值具有不可映射的字符串(例如包含空格),那么您需要應用手動映射/轉換器。

應用枚舉轉換器 (jOOQ 3.10+)

最簡單的解決方案是在您的<forcedType/>上使用<enumConverter>true</enumConverter>標志,如果您沒有任何特殊情況,它也會為您應用org.jooq.impl.EnumConverter 這也記錄在<forcedType/>元素中

org.jooq.impl.EnumConverter相同的規則適用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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