搜尋

搜尋結果

Spring Data 關聯型態 02
科技新知
MacauYeah・2024-08-09

Presist and Casecade 前次的文章,講了一些Spring Data最基本的關聯概念,但當要正式儲存或刪除,就有些考慮完整性問題。平常我們在處理資料庫的關聯表格時,也需要面Foreign Key的正確性問題。同樣地,Spring Data也有這方面的考量,但它有提份一個很方便的CascadeType選項,可以簡化一些流程。 假設你只能存取Parent Repo,那你需要在Parent中,加入CascadeType.All。當repo.saveparent時,它就會順多把所有child的也一併進行Save,你也不需要有Child Repo的存在。 @OneToManymappedBy=quot;parentquot;, cascade = CascadeType.All List children = new ArrayList; 但在複雜的狀況下,例如你不想在更新parent的情況下,不小心弄到child,特別是經過public web下的API操作,你對web client的資料正確性有存疑,就不要使用CascadeType了。這也是筆者認為在大多數情況下,我們都會把Parent和Child的CRUD分開操作,然後根據需要使用各自的repo save。 如果你一定要用CascadeType.ALL CascadeType.REMOVE,就要再留意刪除的問題。為什麼?因為刪除 parent,其實指的是某個parent不再存在,但不代表child也要一起刪除,child的parent連結可以變為null,也有重新連結其他parent的可能。 如果大家確定需要共同刪除,就可以用CascadeType.ALL 或 CascadeType.REMOVE。 還有一個新的選擇,orphanRemoval = true,也有類似效果。 @OneToManymappedBy=quot;parentquot;, cascade = CascadeType.REMOVE List children = new ArrayList; or @OneToManymappedBy=quot;parentquot;, orphanRemoval = true List children = new ArrayList; or @OneToManymappedBy=quot;parentquot;, cascade = CascadeType.REMOVE, orphanRemoval = true List children = new ArrayList; 筆者測試過,混著用也是可以的。若大家看過其他教程,可能會覺得orphanRemoval = true 和 CascadeType 總是一起出現,但它們其實是分別操作的。單獨使用orphanRemoval = true,有時候則是為了不會出現無主的child,但這不代表parent和child的想要同步更新。 JPA Entity 的生命週期 Spring Data跟傳統的資料庫Selete,Create,Update,Delete SQL 語句有所不同。也就是這個不同,它的CascadeType比資料庫的Cascade Update和Cascade Delete更強大。 Spring Data 預設其實是使用 jakarta.persistence.EntityManager,每個Entity主要分為四個狀態 Transient New 不在EntityManager的掌控中 Managed 在EntityManager的掌控中,將會在下次flush時,變成sql create或update statement Detached 脫離EntityManager的掌控,不受flush影響 Removed 在EntityManager的掌控中,將會在下次flush時,變成sql delete statement 在Spring Data Jpa 以前,我們若要直接操作Hibernate,經常見到persist, remove的寫法 entityManager.persistentity; entityManager.removeentity; entityManager.detachentity; entityManager.mergeentity; 其實persist就是把處於Transient、Removed的entity,改為Managed。而remove就是把Managed改為Removed。detach,merge也類似,就是Managed,Detached之間互換。 EntityManager最強大的是,它可以讓程序員不需要再為Managed狀態下的entity操心,它會自動判別下次flush,應該create還是update,如果完全沒有改動的,連update也不會執行。 註,flush和commit也有不同,flush就是從java寫到資料庫中,在資料庫commit前,還可以使用rollback放棄。 而Spring Data,則是進一步簡化,它把persist改為save,remove改為delete,然後自動選擇flush的時機。 CascadeType 在解釋完Entity 的生命週期後,終於可以回到CascadeType了。這裏的CascadeType不是資料庫的Cascade操作,其實它是指EntityManager的狀態操作是否有傳遞關係。亦即是,persistparent時,要不要連同child也一起操作 我們查看 CasecadeType 的原始碼,就可以發現可以被傳遞的操作共有以下這些 PERSIST MERGE REMOVE REFRESH DETACH ALL 以上全部 這裏的 CasecadeType.PERSIST ,跟資料庫的 Cascade Update 是不一樣的。資料庫裏的 Cascade Update,是指當 Parent 的 Primary Key 有變,對應child的 Foreign Key也一起變。但因為 JPA Entity 的機制, Parent 的 Primary Key 不可以改變,理論上不會發生類似資料庫的 Cascade Update,頂多有 Cascade Delete。 CasecadeType.PERSIST 就像之前述的生命週期解說一樣, 把 parent和 child 一起拉到受管理的狀態。 註 CascadeType.REMOVE有點尷尬,似乎有更特別的使用規範。筆者測試過,在某些情況下,CascadeType.REMOVE無法處理ForeignKey問題,又或者是,刪除的順序不對。詳見 spring boot data deletion Reference entitylifecyclemodel spring boot data deletion

Beame 積極開拓國際市場 香港商人范榮彰博士太平紳士引領高質素箍牙服務 冀讓世界各地更多人受惠
CTM企業動向
范榮彰博士太平紳士・2024-05-30

由前東華三院總理香港商人范榮彰博士太平紳士創辦的 Beame 是一家香港牙科公司,致力於為客人實現健康美麗的笑容,提供更多人性化的箍牙解決方案,同時推動牙科行業的發展,並在國際舞台上擴展其業務。 Beame 擴展海外業務 提供全球高質素箍牙服務 Beame 團隊由一群資深香港醫療界人士組成,憑藉他們對牙科服務及牙齒矯正的專業知識和先進技術,Beame 在中環、K11、Times Squares、觀塘、南昌及沙田等地設有六家諮詢點,提供箍牙和其他服務諮詢及保養等服務。此外,Beame 的專業團隊擁有豐富的經驗和專業知識,他們會根據每位客戶的需求和期望,利用最新的技術和先進設備,提供個性化的治療方案,確保獲得最佳的箍牙效果。 國際級醫療設備保證品質 Beame 在深圳開設的自有光店,成為該公司在香港以外的首家分店。深圳自有光店提供全科牙科服務,包括全瓷牙齒貼面、藍光美白、植牙、洗牙等。所有療程由香港醫療團隊管理和設計,並使用國際級醫療設備,確保顧客獲得最佳的治療效果。顧客可以在香港和深圳各分店享受服務,同時獲得保養和諮詢服務,讓他們擁有健康美麗的笑容。 范榮彰致力推動牙科產業的發展 除了在香港和深圳,Beame 正在積極擴展海外業務,計劃在澳洲、澳門、台灣、新加坡、馬來西亞和泰國等地開設分店,以滿足不同地區對高質素箍牙服務的需求。這一擴張將使更多人能夠享受到方便快捷的牙齒矯型服務,同時推動牙科產業的發展,為當地經濟帶來增長。 范榮彰博士:希望能夠改善大家的口腔健康 Beame 創辦人范榮彰博士太平紳士表示:「隨著全球人口老化,牙科需求會越來越大,我們致力於提供優質的齒科服務,讓更多人了解並正視牙齒問題的重要性。我們希望能夠改善大家的口腔健康,同時亦為世界各地創造更多機會。」 Beame 的願景是成為世界領先的牙齒護理品牌,並為更多人提供優質的口腔護理服務。他們致力於改善人們的口腔健康,提升他們的自信心和生活質素。通過拓展海外業務,Beame 將為更多人帶來燦爛的笑容,同時為社會經濟發展做出積極貢獻。

Morning 小確幸
澳城餐飲
Cheers!・2016-11-11

小確幸,由早晨開始!早餐是一日中最重要的一餐,吃過營養豐富的早餐,不論返工返學都醒神過人。出門前時間有限,只要搵實用又功能多多的工具幫吓手,就可以為自己和屋企人快速炮製一個健康早餐! 窩夫冬甩之選,一機搞掂! 窩夫、冬甩、飛碟三文治hellip;hellip;一家人各有「飛佛」口味,當真考起每日負責整早餐的「煮」婦?難怪可變出不同花樣的日本「仔」窩夫機一推出,立即成為必入手貨。這部Vitantonio多功能窩夫機,烤盤可輕易拆出更換清洗,除了隨機附 送的格仔窩夫、鯛魚燒和飛碟三文治烤模外,更有冬甩、班戟及Panini等其他 款造型烤盤,剛剛更推出了Cupcake模,隨時炮製各款早餐或下午茶美點亦絕無問題。仔的另一賣點是簡單易用,其900瓦功率加熱快速,烤盤熱力平均,即使是烘焙新手,想焗出外脆內軟的金黃色窩夫,不用5分鐘即可搞掂,趕時間都無有怕。 人氣百變之選 Vitantonio多功能窩夫機 $1,239a 烤盤 每款$209a V仔共有十一款烤盤選擇:冬甩、鯛魚燒、心形格餅、薄餅、瑪德蓮。 草莓心形窩夫 材料: 低筋粉135g 泡打粉 3g 急凍草莓果泥 70g 水70g 鹽1g 三溫糖 25g 全蛋液 35g 葡萄籽油 20g 水果 隨意 乳酪 隨意 做法: 全蛋、三溫糖、鹽、急凍草莓果泥及水拌勻至糖融化。 加入已過篩的粉類拌勻。 加入葡萄籽油拌勻。 然後蓋上保鮮紙靜止約30分鐘。 倒入適量麵糊,待看到氣泡冒出,蓋上蓋子,烘烤3.54分鐘即可。 在心形窩夫澆上乳酪,加上水果裝飾即成。 健康生活 CTM 積分獎賞推介 食得健康自然可以享受健康生活!只要用CTM 積分獎賞計劃 350 積分加優惠價就可以換購 Neoflam Cloc 玻璃保鮮盒套裝或 KENWOOD 攬拌機,由今日起創造美好健康生活!詳情:httpsgoo.glQwEnRZ