搜尋

搜尋結果

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

Presist and Casecade 前次的文章,講了一些Spring Data最基本的關聯概念,但當要正式儲存或刪除,就有些考慮完整性問題。平常我們在處理資料庫的關聯表格時,也需要面Foreign Key的正確性問題。同樣地,Spring Data也有這方面的考量,但它有提份一個很方便的CascadeType選項,可以簡化一些流程。 假設你只能存取Parent Repo,那你需要在Parent中,加入CascadeType.All。當repo.save(parent)時,它就會順多把所有child的也一併進行Save,你也不需要有Child Repo的存在。 @OneToMany(mappedBy="parent", 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,也有類似效果。 @OneToMany(mappedBy="parent", cascade = CascadeType.REMOVE) List children = new ArrayList(); // or @OneToMany(mappedBy="parent", orphanRemoval = true) List children = new ArrayList(); // or @OneToMany(mappedBy="parent", 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.persist(entity); entityManager.remove(entity); entityManager.detach(entity); entityManager.merge(entity); 其實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的狀態操作是否有傳遞關係。亦即是,persist(parent)時,要不要連同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 entity-lifecycle-model spring boot data deletion

抹茶推介 | 醇香回甘の抹茶合集,幫你一鍵喚醒秋困!
澳城餐飲
食在澳門iFood・2021-10-22

Matcha 醇香回甘の抹茶合集 ① <澳義> ●澳門人自己的金馬獎炒雪糕● ② <%Arabica> ●追求“人、事、物”都極致美感的● ③ <御前上茶> ●日式甜品專門店● 01 澳義 藍色波波製成的小小仙女棒作為裝飾,哩隻抹茶雪糕筒非我莫屬喇!滑捋捋嘅雪糕進入口中,即刻茶香四溢,脆卜卜的脆皮筒令口感不再單調! 濃郁的抹茶香氛隨著細嚐由內而外散發,再加上紅豆與格仔餅的鬆軟嚼勁,閉上眼便可以譜寫出「秋天的童話」。 澳義 利澳店:澳門宋玉生廣場利澳酒店地下2號鋪 營業時間:11:00~20:30 02 %Arabica 一抹亮眼的鮮綠色,把初秋的美好詮釋的淋漓盡致,牛乳的醇厚充斥口腔,抹茶的甘香緊跟其後。 杯面平靜而絢麗的拉花圖案,杯中靜謐而含蓄的填充,戲劇般相互交織、碰撞,有甘苦亦有回甜。 %Arabica 地址:澳門大三巴戀愛巷 營業時間:9:00am~9:00pm 03 御前上茶 店內主打的一款聖代 ,草莓由日本進口,裡面有抹茶雪糕、甜脆麥、御前豆腐、草莓碎,抹茶雪糕十分正宗,吃到了日本的味道。 這道甜點的最佳吃法是:先將紅豆放在鬆餅上,再沾上霜淇淋一同食用,抹茶凍在最後品嚐。精緻,就是日式甜點的魅力所在。 御前上茶 地址:澳門荷蘭園大馬路57號 電話:2852-2552 營業時間:12:00~21:00 編輯 | 胖農夫的奶茶 攝影 | 嚕嚕米

【澳門】St. Regis Bar 瑞吉酒吧 ~ 充滿英倫氣息的下午茶
生活在我城
80後愛旅行✈️・2020-12-22

瑞吉酒吧(St. Regis Bar)位於澳門瑞吉酒店二樓,於2020年11月正式營業。 St. Regis Bar只有在星期五~日下午2時至5時30分有下午茶; 其他時間都是休閒酒吧,因此18歲以下人仕於晚上18:00後禁止進入酒吧範圍。 (官網圖片) 整個大廳設計優雅大方,充著古典氣息。 有Bar檯和梳化可供選擇。 (官網圖片) (官網圖片) 我們一早預訂了一個「瑞吉 x Royal Albert百年經典下午茶套餐」,盡可能提前預訂因為到了現場可能會沒有的。 「瑞吉 x Royal Albert百年經典下午茶套餐」是兩人份,包了2份飲料,我們4個人就另外多點2壺茶。 泡茶的時間很講究,漏斗有分3分鐘、4分鐘和5分鐘... 按自己想要的濃度來決定時間。 單點的「波士頓龍蝦三文治」 作為龍蝦控的我覺得這個超好吃!! 人齊了~期待已久的「瑞吉 x Royal Albert百年經典下午茶套餐」!! 一共3層,上面兩層是鹹點,最底層是甜品。甜品都是英倫風,很配合這間在倫敦人裡面的酒吧!! 大笨鐘、地鐵站、London Eye、英倫郵筒..... 雖然不能去英國旅行,但來吃個英倫的的下午茶也不錯~ St. Regis Bar還有一個很有名的甜品,就是「玫瑰」 澳門瑞吉酒吧 中國澳門路氹連貫公路,澳門倫敦人澳門瑞吉酒店2樓 https://www.thestregisbarmacao.com/sc/ 營業時間 週五至日,下午2時至凌晨1時週一至四,下午5時至凌晨1時 瑞吉下午茶週五至日,下午2時至5時30分 阿斯特時光每日,晚上6時30分至8時30分 孩童政策-18歲以下人仕於晚上7時30分後禁止進入酒吧範圍。-酒吧內不提供嬰兒座椅。 服裝規定-男仕禁止穿著無袖服飾、短褲、拖鞋或涼鞋入場。

2017 年索菲特美酒節 葡萄酒愛好者的奇妙感官旅程
澳城餐飲
LifeMag Editor・2017-09-21

雅高酒店集團旗下法式奢華品牌索菲特即將推出 2017 年索菲特美酒節。這場一年一度的盛事將從 2017 年 9 月 21 日至 10 月 31 日在全球索菲特酒店舉辦,美酒節活動由侍酒大師主持,賓客們將有機會在葡萄酒世界之旅中加深對葡萄酒的了解,發掘全新的味覺感受,探索未知和異域風味。在這場盛事中,全球 120 家酒店將共同為賓客呈現葡萄酒和法式生活藝術。 今年是第六屆索菲特美酒節,澳門十六浦索菲特酒店將分別於 9 月和 10 月於雅聚廊大堂吧、樂軒華及派意舫等餐廳舉辦數場美酒晚宴和品酒會,邀請多位品酒專家,務求為賓客帶來璀璨難忘的味蕾體驗。 Superar Apéro Chic 品酒會 作為盛宴的首場活動,澳門索菲特將於 9 月 22 日隆重推出 Superar Apéro Chic 品酒會。是次品酒會與越洋行合作,後者以提供著名酒莊的出品聞名,賓客將有機會一試十三款來自意大利、葡萄牙、紐西蘭的紅白酒及日式燒酒,包括保羅經典白酒、露絲氣酒及真澄 Type-1 純米吟釀等,同時,搭配由澳門索菲特大廚為您精心烹製的旋轉烤肉、印尼烤羊肉多款美食,讓您的味蕾得到全方位滿足。品酒會將於充滿復古法國風的雅聚廊大堂吧舉辦,賓客將在優雅的音樂中與我們共度浪漫之夜。 22/9/2017│6pm – 9pm 1/F 雅聚廊大堂吧 MOP198++/位 +853 8861 7213 澳門索菲特 & 留世酒莊美酒晚宴 澳門索菲特將攜手曾榮獲“中國葡萄酒與烈酒大賽”金獎的留世酒莊於9月29日舉辦美酒晚宴。留世酒莊是中國極少數擁有逾18年樹齡葡萄藤的莊園之一,莊主劉海多年來致力於生產具寧夏產區特色的葡萄酒。 晚宴設於樂軒華粵菜餐廳,賓客將坐擁夜色中的迷人河景,細品氣泡酒,由此拉開晚宴的帷幕。之後我們再呈上多款精選美酒,包括口感柔和順滑的留世赤羽紅葡萄酒2013,具有鮮明的地域風土特色,還有散發黑醋栗、李子和甘草香氣的留世傳奇珍藏紅葡萄酒2012,搭配香煎鵝肝伴六頭鮑、黑松露蛋白伴銀鱈魚配醬汁等菜餚,盡顯粵菜的味美色鮮。 29/9/2017│7pm – 10pm 18/F 樂軒華粵菜餐廳 MOP688+/位 +853 8861 1001