簡體   English   中英

jOOQ:獲取枚舉字段時,如果值無法映射,如何確保它拋出異常

[英]jOOQ: when fetching into a Enum field, how to ensure it throws an exception if the value cannot mapped

我們使用 jOOQ 3.15.4 和 Spring Boot 2.6.2

我們有一個枚舉作為字符串存儲在數據庫中。 在生成的代碼中看起來像這樣:

public final TableField<StatusRecord, String> STATUS = createField(DSL.name("status"), SQLDataType.VARCHAR(255).nullable(false), this, "");

在閱讀它時,我們使用@Column注釋獲取 object :

@Column(name = "status")
StatusEnum status

我們看到的行為是,當我們在 DB 中有一個與枚舉的任何值都不對應的字符串時,我們 map 進入的 object 中的status字段是 null。

有沒有辦法讓這種類型安全,並在字符串無法映射到枚舉時拋出MappingException ,就像枚舉的valueOf方法的標准行為一樣?

該主題已在 jOOQ 的問題跟蹤器、郵件列表等中討論過幾次。有一個待處理的功能請求來更改忽略不可轉換值的當前行為以引發異常,請參閱例如https://github.com/jOOQ/jOOQ/問題/3377

過去要做到不破壞兼容性並不容易,因為轉換是在 static 方法中實現的。 但是從 jOOQ 3.14 開始,我們有了一個ConverterProvider SPI ,因此可以使其可配置,並逐漸轉向快速失敗的策略。

話雖如此,您可以實現自己的ConverterProvider並向其添加此類檢查。 或者,您可以使用代碼生成配置將自定義Converter附加到您的Field ,並在映射無效值時讓它拋出。

暫無
暫無

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

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