[英]Log Creation/Altering of Tables By Envers Hibernate
1) 當有一個用@Audited 注釋的新實體或列時,Hibernate Envers 何時創建或更改架構中的審計表?
2) 有沒有辦法記錄在添加新的審計表或列時調用的 mysql 命令?
當存在使用 @Audited 注釋的新實體或列時,Hibernate Envers 何時創建或更改架構中的審計表?
從技術上講 Hibernate Envers 根本不這樣做,整個步驟由 Hibernate ORM 正確處理。 在 Hibernate ORM 的引導過程中,會發生以下步驟:
有沒有辦法記錄在添加新的審計表或列時調用的 mysql 命令?
有幾種方法可以做到這一點,當然有些方法比其他方法更容易。
例如,您可以啟用 Hibernate SQL 日志記錄,使用您的日志記錄 API 將這些條目配置為寫入一個特殊的命名文件,然后在指定的時間間隔發送這些日志以進行后處理。
您還可以考慮使用更獨立的東西,例如 Debezium,它能夠在事務/歸檔/oplog/binlog 級別監視數據庫更改,並且某些連接器公開了專門存儲 DDL 更改的 Kafka 主題。
Hibernate-envers 正在使用攔截器將更改插入到試聽表中。 它們在事務提交到數據庫之前被調用。
這個問題有點不清楚,如果你說 mysql-commands 我猜你的意思是像CREATE TABLE
和CREATE COLUMN
這樣的更新查詢。 默認情況下,enver 會報告針對模式的違規行為。 我可以想象 - 如果您也將試聽表公開為休眠實體 - hbm2ddl 可能會創建那些創建表和創建列更新查詢。
畢竟我建議使用單一來源的真實版本概念(SSOVOT)和故障快速(FF),並敢於將數據庫作為單一故障點(SPOF)。
是的,休眠插件稱為 enver,但從科學觀點來看,enver(entity-version) 只是實體中標有@Version
的版本屬性。 正確的名稱是 audition,因為您在歷史上記錄了數據庫中表的所有更改。
首先要說的是實體表中的每個有效負載列都可以為空,您必須在試聽表中添加一個列,默認情況下它具有 null 值。 但是,如果真表不允許列中包含空值,則試聽會被破壞。 這會導致意想不到的問題。 這意味着真實列到審計列的自動復制必須是重構模式和數據的過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.