การจำศีลเกือบจะทำลายอาชีพของฉันอย่างไร
เผยแพร่แล้ว: 2022-03-11ลองนึกภาพว่าคุณเป็นนักพัฒนา Java และกำลังจะเริ่มต้นโครงการใหญ่ครั้งต่อไปของคุณ คุณต้องทำการตัดสินใจขั้นพื้นฐานที่จะติดอยู่กับคุณตลอดโครงการที่เหลือ คุณต้องการเลือกสิ่งที่เป็นนามธรรมเชิงวัตถุที่ดีที่สุดของโมเดลข้อมูลที่ยืดหยุ่นของคุณ เนื่องจากคุณไม่ต้องการจัดการกับ SQL ธรรมดา คุณต้องการสนับสนุนข้อมูลทุกประเภท และควรสนับสนุนฐานข้อมูลทุกประเภท
คำตอบที่ชัดเจนคือเพียงแค่ใช้ Hibernate ใช่ไหม 90% ของนักพัฒนา Java จะเห็นด้วยกับคุณ แต่นั่นทำให้การตัดสินใจถูกต้องหรือไม่
มาดูกันว่าจะมีอะไรผิดพลาดบ้างหากคุณสุ่มสี่สุ่มห้าใช้ ไฮเบอร์เนต เพียงเพราะเป็นมาตรฐานที่ยอมรับ
พิจารณา Monica นักพัฒนา Java โมนิกาเพิ่งได้รับการเลื่อนตำแหน่งให้เป็นสถาปนิก และตอนนี้มีหน้าที่รับผิดชอบในการจัดวางกลุ่มเทคโนโลยีสำหรับผลิตภัณฑ์ใหม่ที่บริษัทของเธอ เธอรู้ว่าในโลกของ Java มีเครื่องมือที่ดีเพียงเครื่องมือเดียวสำหรับจัดการการสื่อสารฐานข้อมูล: Hibernate ไฮเบอร์เนต เป็นมาตรฐาน JPA ที่รู้จักกันดีและรองรับ อย่างไรก็ตาม คุณควรตรวจสอบบางสิ่งก่อนเริ่มโครงการอยู่เสมอ โชคดีที่เบ็นเพื่อนร่วมงานของเธอรู้จักคนที่ใช่
ไฮเบอร์เนตเสียงเหมือนกระสุนเงิน
เบ็น - สวัสดีโมนิก้า ฉันอยากจะแนะนำจอห์น เขาเป็นผู้เชี่ยวชาญ ไฮเบอร์เนต และเขาจะช่วยคุณ
โมนิก้า - เฮ้ จอห์น ดีใจที่คุณหาเวลาให้ฉันได้ ดังนั้น เรากำลังสร้าง Next Big Thing ของเรา คุณรู้ไหม เรากำลังวางแผนที่จะเป็น Facebook หรือ Google ตัวต่อไป วันที่วุ่นวาย. มันจะใหญ่มาก ยอดเยี่ยมมาก! ทุกคนตื่นเต้นมาก! ฉันได้รับการเลื่อนตำแหน่งให้เป็นสถาปนิก ดังนั้นตอนนี้ฉันต้องเลือกสแต็กที่เราจะใช้ ขาดอย่างเดียวคือความเพียร...
จอห์น - ไฮเบอร์เนต !
โมนิก้า - ใช่! อย่างแน่นอน! แค่สิ่งที่ฉันคิด! ดูเหมือนว่าจะเป็นคู่ที่สมบูรณ์แบบและเป็นเรื่องจริงสำหรับเรา โซลูชันระดับองค์กรที่แท้จริงสำหรับปัญหาขององค์กรอย่างแท้จริง พิสูจน์โดยตลาดและมีประวัติอันยาวนาน ฉันเคยได้ยินประสบการณ์ดีๆ มากมายเกี่ยวกับเรื่องนี้ อย่างไรก็ตาม ฉันมีปัญหากับเพื่อนร่วมทีมคนหนึ่งของเรา เขาต่อต้านมันโดยสิ้นเชิง เขารู้เรื่องฐานข้อมูลมากมาย และเขากลัวที่จะเพิ่มเลเยอร์อื่นระหว่างแอปพลิเคชันของเรากับฐานข้อมูล เขาฉลาดมาก และฉันต้องการข้อโต้แย้งที่ดีจริงๆ เพื่อโน้มน้าวเขาว่านี่เป็นการตัดสินใจที่ดี คุณช่วยฉันด้วยได้ไหม
จอห์น - แน่นอน! ฉันยินดีที่จะ ไฮเบอร์เนต เป็นเครื่องมือที่โดดเด่นอย่างแท้จริง มีการใช้กันอย่างแพร่หลายในโซลูชันองค์กรขนาดใหญ่อย่างแท้จริง เช่น ธนาคาร คุณไม่สามารถผิดพลาดได้ คิดว่าคงอยู่: เลือก ไฮเบอร์เนต หากคุณกำลังเขียนภาษา Java นี่เป็นตัวเลือกที่เหมาะสมอย่างยิ่ง และคุณก็มีพอร์ตสำหรับภาษาอื่นๆ ด้วย ดูกี่ลักษณะงานที่ต้องการมัน!
โมนิก้า - ฉันเห็นด้วยอย่างยิ่ง! ฉันมีความรู้สึกเดียวกันกับมัน ในโครงการก่อนหน้านี้ เราใช้ SQL ส่วนใหญ่ผ่าน JDBC แบบเก่าธรรมดา น่าขัน! ฉันรู้! แต่นี่คือสิ่งที่: เรามีพวก SQL ที่ฉลาดจริงๆ ในทีม และเมื่อพวกเขาเห็น SQL ที่สร้างโดย Hibernate พวกเขารู้สึกประหม่า มันดูน่าเกลียดและอ่านไม่ออก นี่จะเป็นปัญหาในอนาคตหรือไม่?
จอห์น - ดูสิ พวก DBA มีมุมมองที่แตกต่างออกไป พวกเขากลัว ไฮเบอร์เนต เพราะดูเหมือนว่าจะเข้ามาแทนที่บทบาทของพวกเขาในโครงการ นอกจากนี้ ฐานข้อมูลยังมีเครื่องมือเพิ่มประสิทธิภาพคิวรีในตัว คุณจึงไม่ต้องกังวลว่าคิวรีเหล่านั้นจะมีลักษณะอย่างไร ฐานข้อมูลจะปรับให้เหมาะสมสำหรับคุณ มันคือทั้งหมดที่เกี่ยวกับการพัฒนาอย่างรวดเร็ว ซึ่ง SQL ไม่สามารถทำได้
โมนิก้า - จริงเหรอ?! ไม่จัดการกับ SQL อีกต่อไป? อัศจรรย์! ครั้งล่าสุดที่ DBA ใช้เวลาหลายสัปดาห์ในการพยายามเพิ่มประสิทธิภาพการสืบค้นข้อมูล สัปดาห์! โอ้ ฉันรู้สึกอายมากที่บอกคุณแบบนี้ แต่คุณรู้ไหมว่าเราใช้ … ขั้นตอนการจัดเก็บ (หัวเราะ) โอ้ มันช่างวุ่นวายเหลือเกิน คุณเชื่อไหมว่าโครงการนี้ยังคงใช้อยู่ ฉันรู้สึกสงสารผู้คนที่นั่นมาก พวกเขายังต้องเขียนโค้ดที่น่าเบื่อซ้ำแล้วซ้ำอีก ฉันสงสัยว่ายังคงเป็นโครงการ Java หรือ SQL หรือไม่
จอห์น - นั่นคือความแตกต่างระหว่างแนวทางเชิงวัตถุกับแนวทางเชิงสัมพันธ์ เป็นสิ่งที่เรียกว่าไม่ตรงกันของอิมพีแดนซ์เชิงวัตถุ ไฮเบอร์เนต สามารถปิดช่องว่างนี้ได้ นักพัฒนาสามารถมุ่งเน้นไปที่การสร้างตรรกะทางธุรกิจ ฟีเจอร์พุชทำให้ผู้มีส่วนได้ส่วนเสียและฝ่ายจัดการทั้งหมดมีความสุข ทำสิ่งที่สำคัญที่สุด: ธุรกิจ! รหัสสำเร็จรูปจำนวนมากจะหายไป และคุณจะมีการเชื่อมต่อระหว่างตรรกะและข้อมูลที่เชื่อถือได้
โมนิกา - ความร่วมมือซึ่งกันและกัน ผนึกกำลังเต็มที่ เช่นเดียวกับฐานข้อมูลที่เป็นส่วนหนึ่งของภาษาตั้งแต่แรกเริ่ม ฉันมีความสุขมากที่ได้เป็นผู้นำของเทคโนโลยีที่ก้าวกระโดดแห่งศรัทธานี้ มันเหมือนกับความเร็วของวาร์ปในซอฟต์แวร์ช่วงระยะการเดินทาง
จอห์น - อ๋อ! คุณได้มัน!
โมนิก้า - โอ้ พระเจ้า ฉันตื่นเต้นมาก! ขอบคุณจอห์น! ฉันพร้อมแล้ว!
ความเจ็บปวดที่เพิ่มขึ้นด้วยโซลูชั่นที่ไม่ยืดหยุ่น
โมนิก้า - เฮ้ จอห์น จำโปรเจ็กต์ที่เราพูดถึงเมื่อปีที่แล้วได้ไหม?
จอห์น - แน่นอน เป็นอย่างไรบ้าง?
โมนิก้า - เรากำลังจะทำการผลิตในเร็วๆ นี้ ทุกอย่างเรียบร้อยดี แต่บางคำถามก็ผุดขึ้นมา
จอห์น - แน่นอน ตีฉัน
โมนิกา - เราไม่สามารถสร้างสคีมาฐานข้อมูลของเราตั้งแต่เริ่มต้นได้อีกต่อไป วิธีใดดีที่สุดในการสนับสนุนการเปลี่ยนแปลงสคีมาโดยไม่สูญเสียข้อมูล
จอห์น - ก่อนอื่น ไฮเบอร์เนต ไม่ได้มีไว้เพื่อใช้เป็นเครื่องมือในการโยกย้ายการผลิต ใช้บางอย่างเช่น FlywayDB หรือ Liquibase มันค่อนข้างง่าย คุณจดสคริปต์การโยกย้าย จากนั้นคุณอัปเดตโมเดลเอนทิตีพร้อมกับการแมป ไฮเบอร์เนต เพื่อให้ซิงค์กับโครงสร้างฐานข้อมูลจริง
โมนิก้า - อืม เข้าใจแล้ว เราใช้การย้ายข้อมูล SQL แบบธรรมดาในโปรเจ็กต์ก่อนหน้านี้
จอห์น - ก็ดีเหมือนกัน ตราบใดที่คุณยังคงซิงค์โมเดลเอนทิตีและสคีมา ให้ทำตามที่คุณต้องการ
โมนิก้า - เข้าใจแล้ว มีอีกสิ่งหนึ่ง เรากำลังดิ้นรนกับปัญหาขี้เกียจ/กระตือรือร้นอยู่เสมอ จนถึงจุดหนึ่ง เราตัดสินใจทำทุกอย่างอย่างกระตือรือร้น แต่ดูเหมือนว่าจะไม่เหมาะ และยิ่งไปกว่านั้น บางครั้งก็ไม่สามารถเข้าถึงบางฟิลด์ได้เนื่องจากไม่มีเซสชันหรืออะไรทำนองนั้น เป็นเรื่องปกติหรือไม่?
John - คุณต้องเรียนรู้เพิ่มเติมเกี่ยวกับ Hibernate การทำแผนที่จากฐานข้อมูลไม่ใช่เรื่องง่าย โดยทั่วไปมีหลายวิธีในการทำ คุณเพียงแค่ต้องเลือกวิธีการที่เหมาะกับคุณ การดึงข้อมูลแบบขี้เกียจทำให้คุณสามารถโหลดวัตถุเหล่านั้นได้ตามต้องการ แต่คุณต้องดำเนินการภายในเซสชันที่ใช้งานอยู่
โมนิกา - เรายังคงดิ้นรนกับเอ็นจิ้นฐานข้อมูลที่จะใช้สำหรับการปรับใช้ขั้นสุดท้าย ฉันคิดว่า ไฮเบอร์เนต นั้นพกพาได้ แต่เรามีคำถามดั้งเดิมที่ใช้เวทย์มนตร์ MS SQL และเราต้องการใช้ MySQL ในการผลิต
John - Hibernate ให้ความยืดหยุ่นแก่คุณตราบใดที่คุณใช้เกณฑ์แยกหรือ HQL การสืบค้นข้อมูลดั้งเดิมจะผูกโซลูชันของคุณกับฐานข้อมูล
โมนิก้า - ดูเหมือนว่าเราต้องยึดติดกับ MS SQL แล้ว คำถามสุดท้าย: เพื่อนร่วมทีมของฉันบอกว่าไม่มีคีย์เวิร์ด "จำกัด" ใน HQL ฉันคิดว่าเขาล้อเล่น แต่ฉันหามันไม่เจอ ขอโทษที่ถามโง่...
John - แท้จริงแล้วไม่มีคีย์เวิร์ด "limit" ใน HQL คุณสามารถควบคุมสิ่งนี้ได้ผ่านออบเจ็กต์คิวรีเนื่องจากเป็นฐานข้อมูลเฉพาะผู้จำหน่าย
Monica - ดูแปลกที่องค์ประกอบอื่นๆ ทั้งหมดอยู่ใน HQL ช่างเถอะ. ขอบคุณที่สละเวลา!
เรากำลังแฮ็กโซลูชันร่วมกันใน SQL อีกครั้ง
โมนิก้า - จอห์น ตอนแรกเราจะไม่จัดการกับ SQL แต่ตอนนี้ดูเหมือนว่าเราต้องทำ ความต้องการของเรากำลังเพิ่มขึ้น และดูเหมือนว่าไม่มีทางหลีกเลี่ยงได้ รู้สึกผิด แต่เราได้เริ่มใช้ SQL อีกครั้งทุกวัน

จอห์น - ก็ไม่ผิด คุณไม่จำเป็นต้องเน้นที่ฐานข้อมูลตั้งแต่เริ่มต้น อย่างไรก็ตาม เมื่อโปรเจ็กต์เติบโตขึ้น จะเป็นการดีที่จะใช้ SQL และทำงานเพื่อเพิ่มประสิทธิภาพ
โมนิกา - บางครั้งเราใช้เวลาหลายวันเพื่อค้นหาข้อผิดพลาด ดูเหมือนว่าเราต้องวิเคราะห์ Hibernate -generated SQL เนื่องจากเราไม่รู้ว่าเหตุใดจึงไม่ทำงานตามที่คาดไว้และให้ผลลัพธ์ที่ไม่คาดคิด เราพบปัญหาบางอย่างที่เป็นที่รู้จักกันดีในตัวติดตามบั๊ก ไฮเบอร์เนต นอกจากนี้ เป็นการยากที่จะเขียนการย้ายข้อมูลที่เหมาะสมในขณะที่รักษารูปแบบเอนทิตีให้ซิงค์กัน ใช้เวลานานเนื่องจากเราต้องเรียนรู้มากมายเกี่ยวกับ Hibernate internals และคาดการณ์ว่าจะทำงานอย่างไร
จอห์น - มีช่วงการเรียนรู้อยู่เสมอ คุณไม่จำเป็นต้องเขียนอะไรมาก แต่คุณจำเป็นต้องรู้ว่ามันทำงานอย่างไร
โมนิก้า - การทำงานกับชุดข้อมูลที่ใหญ่กว่านั้นก็น่ารำคาญเช่นกัน เมื่อเร็ว ๆ นี้ เราได้นำเข้าฐานข้อมูลจำนวนมาก และมันช้าอย่างเจ็บปวด จากนั้นเราพบว่าเราต้องล้างเซสชันเพื่อให้เร็วขึ้น ถึงกระนั้น ก็ยังช้ากว่าอย่างเห็นได้ชัด เราจึงตัดสินใจเขียนใหม่เป็นคำสั่ง SQL ธรรมดา ที่ตลกก็คือ การเขียน SQL แบบธรรมดาเป็นวิธีที่เร็วที่สุดในการทำ ดังนั้นเราจึงตัดสินใจทำเป็นตัวเลือกสุดท้ายของเรา
John - การนำเข้าไม่ใช่กระบวนการเชิงวัตถุ ไฮเบอร์เนต มุ่งเน้นไปที่การออกแบบเชิงวัตถุ จำไว้ว่าคุณสามารถใช้การสืบค้นข้อมูลแบบเนทีฟได้ตลอดเวลา
Monica - คุณช่วยให้ฉันเข้าใจว่าแคช ไฮเบอร์เนต ทำงานอย่างไร ฉันแค่ไม่เข้าใจ มีแคชระดับที่หนึ่ง/สองอยู่บ้าง ทั้งหมดนี้เกี่ยวกับอะไร?
จอห์น - แน่นอน เป็นแคชระดับธุรกรรมที่เรียกว่าข้อมูลถาวร เป็นไปได้ที่จะกำหนดค่าคลัสเตอร์หรือแคชระดับ JVM แบบคลาสต่อคลาสและแบบคอลเลกชั่นต่อคอลเลกชั่น คุณยังสามารถเสียบแคชคลัสเตอร์ แต่จำไว้ว่าแคชไม่ได้รับรู้ถึงการเปลี่ยนแปลงใดๆ ที่เกิดขึ้นกับที่จัดเก็บถาวรโดยแอปพลิเคชันอื่น อย่างไรก็ตาม สามารถกำหนดค่าให้ลบข้อมูลแคชที่หมดอายุเป็นประจำได้
โมนิก้า - ขอโทษนะ คิดว่าฉันมีวันที่แย่ คุณช่วยอธิบายมากกว่านี้หน่อยได้ไหม
จอห์น - แน่นอน เมื่อใดก็ตามที่คุณส่งอ็อบเจ็กต์เพื่อ save
, update
, saveOrUpdate
หรือดึงข้อมูลผ่าน load
, get
, list
, iterate
หรือ scroll
วัตถุนั้นจะถูกเพิ่มไปยังแคชภายในของเซสชัน คุณยังสามารถลบอ็อบเจ็กต์และคอลเล็กชันของออบเจ็กต์ออกจากแคชระดับแรกได้
โมนิก้า - เอ่อ...
จอห์น - นอกจากนี้ คุณสามารถควบคุมโหมดแคชได้ คุณสามารถใช้โหมด normal
เพื่ออ่านและเขียนรายการไปยังแคชระดับที่สองได้ ใช้โหมด get
เพื่ออ่านจากระดับที่สอง แต่คุณไม่สามารถเขียนกลับได้ ใช้ put
ซึ่งเหมือนกับ get
แต่คุณไม่สามารถอ่านจากระดับที่สองได้ คุณยังสามารถใช้โหมด refresh
ซึ่งกำลังจะเขียนถึงระดับที่สอง แต่จะไม่อ่านจากโหมดนี้ และข้ามการ use minimal puts
บังคับให้รีเฟรชแคชระดับที่สองสำหรับรายการทั้งหมดที่อ่านจากฐานข้อมูล
โมนิก้า - เข้าใจแล้ว ตกลง. ให้ฉันคิดเกี่ยวกับเรื่องนี้ โอ้ ดึกแล้ว ฉันต้องไปแล้ว ขอบคุณที่สละเวลา!
จอห์น - ไม่เป็นไร!
ยอมแพ้ในการไฮเบอร์เนต
โมนิก้า - จอห์น ฉันคิดว่าเรากำลังเข้าสู่ยุคใหม่ของการพัฒนาซอฟต์แวร์ ฉันคิดว่าเรากำลังกระโดดปีแสง แต่หลังจากสี่ปี ดูเหมือนว่าเรากำลังเผชิญกับปัญหาเดิมๆ อยู่แต่ในมุมที่ต่างออกไป ฉันต้องเรียนรู้สถาปัตยกรรม Hibernate , การกำหนดค่า, การบันทึก, กลยุทธ์การตั้งชื่อ, tuplizers, ตัวแก้ไขชื่อเอนทิตี, ตัวสร้างตัวระบุที่ปรับปรุง, การเพิ่มประสิทธิภาพตัวสร้างตัวระบุ, union-subclasses, มาร์กอัป XDoclet, การเชื่อมโยงแบบสองทิศทางกับคอลเลกชันที่จัดทำดัชนี, การเชื่อมโยงแบบไตรภาค, idbag, การผสมผสานความหลากหลายโดยนัยด้วย การแมปมรดกอื่น ๆ การจำลองอ็อบเจ็กต์ระหว่างที่เก็บข้อมูลสองแห่งที่แตกต่างกัน อ็อบเจ็กต์ที่แยกออกมาและการกำหนดเวอร์ชันอัตโนมัติ โหมดการปล่อยการเชื่อมต่อ อินเทอร์เฟซเซสชันที่ไม่ระบุสถานะ ทั้งที่ฉันรู้ทุกอย่าง ดูเหมือนเราจะล้มเหลวอย่างเลวร้าย มันเป็นความล้มเหลวของซอฟต์แวร์! ล้มเหลวขั้นสุด! ภัยพิบัติ! อาร์มาเก็ดดอน!
จอห์น - เดี๋ยวก่อน! เกิดอะไรขึ้น?
โมนิก้า - เรามาถึงทางตันแล้ว ประสิทธิภาพแอปพลิเคชันของเราช้าอย่างน่าขัน! กว่าจะได้รายงานต้องรอสองวัน! สองวันในการสร้างแดชบอร์ดให้กับลูกค้าจริงๆ หมายความว่าทุกวันเราต้องเพิ่มส่วนการคำนวณของเรา ในขณะที่แดชบอร์ดของเราล้าสมัยมากขึ้นเรื่อยๆ ผู้เชี่ยวชาญ DBA ของเราทำงานมาสองเดือนแล้วเพื่อเพิ่มประสิทธิภาพการสืบค้นข้อมูล ในขณะที่โครงสร้างฐานข้อมูลของเรายุ่งเหยิงไปหมด มีนักพัฒนาที่สนับสนุนเขา แต่ปัญหาคือ DBA กำลังคิดใน SQL และนักพัฒนาใช้เวลาหลายวันในการแปลสิ่งนี้เป็นเกณฑ์แยกหรือรูปแบบ HQL เรากำลังพยายามใช้ Native SQL ให้มากที่สุด เนื่องจากประสิทธิภาพเป็นสิ่งสำคัญในขณะนี้ อย่างไรก็ตาม เราทำอะไรไม่ได้มากเนื่องจากสคีมาฐานข้อมูลดูเหมือนจะผิด รู้สึกถูกต้องจากมุมมองเชิงวัตถุ แต่ดูเหมือนไร้สาระจากมุมมองเชิงสัมพันธ์ ฉันถามตัวเอง: สิ่งนี้เกิดขึ้นได้อย่างไร? นักพัฒนากำลังบอกเราว่าการเปลี่ยนโครงสร้างเอนทิตีจะเป็นความพยายามครั้งใหญ่ ดังนั้นเราจึงไม่สามารถจ่ายได้ ฉันจำได้ว่าในโปรเจ็กต์ที่แล้ว มันไม่เป็นระเบียบ แต่เราไม่เคยจบลงที่จุดวิกฤตเช่นนี้ เราสามารถเขียนแอปพลิเคชันที่แตกต่างไปจากเดิมอย่างสิ้นเชิงเพื่อทำงานกับข้อมูลได้ ตอนนี้ การปรับเปลี่ยนตารางที่สร้างขึ้นเหล่านั้นมีความเสี่ยง เนื่องจากเป็นการยากจริงๆ ที่จะตรวจสอบให้แน่ใจว่าโมเดลเอนทิตีจะทำงานได้อย่างถูกต้องเสมอ และนี่ไม่ใช่แม้แต่ส่วนที่แย่ที่สุด! ในการเพิ่มประสิทธิภาพ เราต้องไม่เพียงแค่แก้ปัญหาฐานข้อมูลเท่านั้น แต่ยังรวมถึงปัญหากับเลเยอร์ทั้งหมดระหว่างฐานข้อมูลของเรากับแอปพลิเคชันด้วย มันล้นหลาม! เรามีพวกใหม่พวกนี้ ที่ปรึกษา พวกเขากำลังพยายามดึงข้อมูล ใส่ลงในที่เก็บข้อมูลอื่น แล้วทำการคำนวณจากภายนอก ใช้เวลามากเกินไป!
จอห์น - ฉันไม่รู้จะพูดอะไร
โมนิก้า - คุณเห็นจอห์น; ฉันไม่ต้องการที่จะตำหนิคุณ ฉันเลือก ไฮเบอร์เนต เพื่อแก้ปัญหาเหล่านี้ แต่ตอนนี้ฉันได้เรียนรู้แล้วว่านี่ไม่ใช่สัญลักษณ์แสดงหัวข้อย่อยสีเงิน ความเสียหายได้ทำไปแล้วและไม่สามารถย้อนกลับได้ ที่จริงฉันอยากจะถามคุณบางอย่าง: ฉันใช้เวลาสี่ปีที่ผ่านมาในอาชีพการงานของฉันในการจัดการกับสิ่งที่ ไฮเบอร์เนต ดูเหมือนว่าฉันไม่มีอนาคตในบริษัทปัจจุบันของฉัน คุณสามารถช่วยฉันได้ไหม?
แล้วบทเรียนที่ได้รับคืออะไร?
จอห์น - เฮ้ ปีเตอร์ ให้ฉันแนะนำโมนิก้า
ปีเตอร์ - เฮ้ โมนิก้า! เรากำลังสร้างสิ่งใหม่ที่ยิ่งใหญ่ครั้งต่อไปที่คุณรู้จัก มันจะยิ่งใหญ่มาก! เราอยากเป็นเหมือนอูเบอร์! รู้ไหมว่าความเพียร...
โมนิก้า - ไม่ จำศีล !
สรุป
โมนิกาเป็นผู้เชี่ยวชาญ ไฮเบอร์เนต อย่างไรก็ตาม ไฮเบอร์เนต ในกรณีนี้เป็นการตัดสินใจที่ผิด ทันทีที่เธอค้นพบว่าวิธีแก้ปัญหาของเธอกลายเป็นปัญหาที่ใหญ่กว่าปัญหาเดิม มันเป็นภัยคุกคามที่ใหญ่ที่สุดต่อโครงการทั้งหมด
ข้อมูลเป็นจุดประสงค์หลักของแอปพลิเคชันและจะส่งผลต่อสถาปัตยกรรมทั้งหมดไม่ว่าจะชอบหรือไม่ก็ตาม ดังที่เราได้เรียนรู้จากเรื่องราวนี้ อย่า ใช้ Hibernate เพียงเพราะว่าแอปพลิเคชัน Java ของคุณกำลังใช้ฐานข้อมูลหรือเพราะหลักฐานทางสังคม เลือกโซลูชันที่มีความยืดหยุ่น มีตัวเลือกมากมายสำหรับเครื่องห่อ JDBC ที่ทนทาน เช่น JdbcTemplate หรือ Fluent JDBC Wrapper มีโซลูชั่นที่มีประสิทธิภาพอื่นๆ เช่น jOOQ