第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

jOOQ 使用一個數(shù)據(jù)庫生成代碼,另一個數(shù)據(jù)庫執(zhí)行代碼

jOOQ 使用一個數(shù)據(jù)庫生成代碼,另一個數(shù)據(jù)庫執(zhí)行代碼

皈依舞 2023-02-23 15:51:27
我們正在更改數(shù)據(jù)庫,從支持 8 位 int 的數(shù)據(jù)庫更改為不支持的數(shù)據(jù)庫。當(dāng) Liquibase 創(chuàng)建一個導(dǎo)致 jOOQ 生成“短”變量但我們的代碼使用 byte/Byte 的 DB 時,我們的代碼會中斷——這會破壞代碼簽名。有人建議我們繼續(xù)使用以前的數(shù)據(jù)庫 (HSQLDB) 生成代碼,而不是重新編碼,它“應(yīng)該”與新數(shù)據(jù)庫一起運(yùn)行。有不同意見,除了直覺我找不到任何確定的東西,這似乎與 jOOQ 的設(shè)計(jì)目的背道而馳。有沒有人成功地做到了這一點(diǎn)?
查看完整描述

1 回答

?
牧羊人nacy

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個贊

對于這樣的問題顯然沒有絕對的是/否答案,但是有幾種解決方案/解決方法:


使用之前的數(shù)據(jù)庫產(chǎn)品生成代碼

這將在短時間內(nèi)起作用,例如現(xiàn)在,但隨著您繼續(xù)前進(jìn),它將成為您的模式設(shè)計(jì)的一個極其有限的因素。您將繼續(xù)圍繞 HSQLDB 的功能定制您的 DDL 和其他一些設(shè)計(jì)決策,并且您將無法利用新數(shù)據(jù)庫產(chǎn)品的其他功能。這在遷移數(shù)據(jù)時尤其受限,因?yàn)锳LTER TABLE方言之間的陳述大不相同。


我只會在很短的時間內(nèi)推薦這種方法,例如,如果您不能立即徹底解決這個問題。


使用 jOOQ 的<forcedType/>機(jī)制來重寫你的數(shù)據(jù)類型

jOOQ 的代碼生成器允許在將模式的元數(shù)據(jù)加載到代碼生成器之前重寫數(shù)據(jù)類型。這樣,即使您的新數(shù)據(jù)庫產(chǎn)品不byte支持.TINYINTTINYINT


這是一個徹底的解決方案,無論您使用的是什么產(chǎn)品,您都可能希望實(shí)施它,因?yàn)樗鼤槟峁┮环N方法來重新定義部分架構(gòu),僅適用于 jOOQ 的代碼生成器,而與您生成代碼的方式無關(guān).


該功能記錄在此處: https: //www.jooq.org/doc/latest/manual/code-generation/codegen-advanced/codegen-config-database/codegen-database-forced-types


對于您的情況,這絕對是一個更長期的解決方案。


請注意,未來的 jOOQ 將能夠使用CHECK約束作為輸入元數(shù)據(jù)來決定是否應(yīng)用這樣的<forcedType/>. 我想你會CHECK (my_smallint BETWEEN -128 AND 127)在每個這樣的列上放置一個約束,所以你可以很容易地識別哪些列適用于<forcedType/>:https://github.com/jOOQ/jOOQ/issues/8843


在該功能可用之前,您可以通過編程代碼生成器配置自己實(shí)現(xiàn)它: https: //www.jooq.org/doc/latest/manual/code-generation/codegen-programmatic/


或者,從 jOOQ 3.12 開始,通過使用 SQL 表達(dá)式來生成匹配的正則表達(dá)式<forcedType/>。例如在 Oracle 中:


<forcedType>

  <name>TINYINT</name>

  <sql>

    select listagg(owner || '.' || table_name || '.' 

      || regexp_replace(search_condition_vc, ' between.*', ''), '|')

    from user_constraints

    where constraint_type = 'C'

    and regexp_like(search_condition_vc, '.* between -128 and 127');

  </sql>

</forcedType>

您可以使用基于文件的元數(shù)據(jù)源

jOOQ 不必連接到實(shí)時數(shù)據(jù)庫實(shí)例即可對您的模式進(jìn)行逆向工程。您還可以將 DDL 代碼傳遞給 jOOQ 或 XML 文件:


https://www.jooq.org/doc/latest/manual/code-generation/codegen-ddl/

https://www.jooq.org/doc/latest/manual/code-generation/codegen-xml/

這并不能真正直接解決您的問題,但也許可以使解決起來更容易一些。但是,這些方法還有其他限制,例如,當(dāng)前(jOOQ 3.12)不支持存儲過程,所以我只是為了完整起見在這里添加它,而不是建議您現(xiàn)在使用它。


查看完整回答
反對 回復(fù) 2023-02-23
  • 1 回答
  • 0 關(guān)注
  • 169 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號