[英]jOOQ - DefaultRecordMapper - Case sensitivity
DefaultRecordMapper
可以不區分大小寫嗎?
問題的原因是Oracle
和H2
如果不引用則具有默認的 captilazing 標識符行為(參見https://seeq.atlassian.net/wiki/spaces/KB/pages/443088907/SQL+Column+Names+and+案例+敏感性和https://community.oracle.com/tech/developers/discussion/895094/is-there-anyway-to-make-oracle-field-names-case-insensitive-or-is-it-just ) . 與SQL Server
不同,它在創建表時使用區分大小寫。
SQL output 的區分大小寫與 Oracle 和 H2 的 POJO 字段不匹配。
我能想到的唯一 2 個解決方案是:
ITEMUNIT as "itemUnit"
)。 然而,第一種解決方案有一個缺點。 如果使用fetch
而不是fetchInto
來原始處理結果,則列值的get
方法也需要別名。 因此,開發人員需要知道僅對fetchInto
使用 helper 方法和對fetch
使用普通的select
之間存在區別。
我錯過了什么嗎? 對此有更好/更簡單的解決方案嗎?
我找到了 https://www.jooq.org/doc/latest/manual/sql-building/dsl-context/custom-settings/settings-name-style/但這並不能解決問題。
您不能使DefaultRecordMapper
不區分大小寫,目前(jOOQ 3.16)沒有這樣的配置,並且沒有任何實施此配置的計划,因為它似乎沒有必要,除了像您這樣的邊緣情況。
一些需要:
ITEMUNIT
,那么為什么不調用您的屬性itemunit
? 這是最規范的翻譯。 在這里人工制作駱駝套而不是蛇套,你並沒有真正獲得多少收益itemUnit
,那么為什么不一致地將您的數據庫列命名為ITEM_UNIT
呢?在上述兩種方法中,您不需要不區分大小寫作為解決方法,而是在數據庫和應用程序中使用一致的命名。
如果上述方法不可行,您仍然可以使用各種方法來解決此問題:
@Column
注釋來注釋您的屬性,jOOQ 支持ITEMUNIT AS ITEM_UNIT
DefaultRecordMapper
時手動為列添加別名,但這很費力(您不必為所有列添加別名,只需為名稱不一致的列添加別名)RecordMapperProvider
覆蓋DefaultRecordMapper
行為Records::mapping
創建的自定義RecordMapper
,例如fetch(mapping(POJO::new))
,假設您的 POJO 具有接受所有字段的構造函數但在所有這一切中,我認為潛在的問題是命名不一致。 如果您只是一致地命名列/屬性,將會容易得多。 進行這種特殊區分沒有任何價值,只會帶來麻煩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.