[Java] สร้าง Hibernate Entity ด้วยวิธี Reverse Engineering

          Hibernate ประกอบด้วยหลายส่วน ซึ่งผมได้เขียนไว้แล้วก่อนหน้านี้ (รู้จัก OR-Mapping และ Hibernate เบื้องต้น) ในโพสนี้เราจะมาสร้าง ORM ภาคปฏิบัติกัน **คำเตือน ภาพประกอบเยอะมาก**

          การ mapping ระหว่าง database กับ class นั้น เรารู้แล้วว่า Entity Class เป็นตัวกลางที่ตอบโจทย์การใช้งาน การที่เราจะสร้าง Entity Class ได้นั้น เราต้องรู้โครงสร้าง database ก่อน ซึ่งเราสามารถตั้งค่า connection และ generated Entity Class โดยอัตโนมัติได้ โดยวิธีการดังกล่าวเรียกว่าวิธีการทำ..

"Hibernate Reverse Engineering"

          Hibernate Reverse Engineering ยังมีหัวใจสำคัญอีกอย่างหนึ่งคือ การทำ Type Mapping เพื่อกำหนดว่าถ้าเจอ Database data type ต้องแปลงเป็น Java data type อะไร

          Eclipse ยังคงเป็น editor ที่มีเครื่องมือในการสร้าง Hibernate Entity Class ที่ดีตัวหนึ่งอยู่ ถึงแม้ว่าตอนนี้ผมแทบจะหนีไปใช้ editor จากค่าย  JetBrains ถึงแม้ว่า IntelliJ IDEA สามารถสร้าง Entity Class ได้เช่นกัน แต่ปัญหาคือ Mapped Type จะถูกกำหนดไว้แล้ว (default) ซึ่งบางครั้งเราอาจไม่ได้ต้องการ type ข้างต้น เช่น เราต้องการให้เป็น java.lang.Long เมื่อเจอ NUMBER จาก database ถึงแม้ว่าเราจะแก้เองได้แต่จะต้องแก้ทุก field เอง เราลองมาดูตัวอย่างที่ไม่ดีกันก่อน
*อ้างอิง IntelliJ IDEA ไม่รองรับ  Generate Persistce Mapping - Mapped Type
Wizard for generate Entity Class - IntelliJ IDEA

เข้าสู่บทเรียน

  • Eclipse ที่ใช้ต้องเป็นตัวที่รองรับ Java EE 


  • ติดตั้ง Plugins Hibernate Tools 
หาปลั๊กอินชื่อ 'JBoss Tools'
ติดตั้งแค่ Hibernate Tools ก็พอ (ไม่ต้องติ๊กเยอะ เดี๋ยวโหลดนาน)

  • เมื่อติดตั้ง Hibernate Tools เสร็จแล้วเราจะสามารถ New Files ต่างๆ ของ Hibernate ได้
โดยเราจะต้องทำตามลำดับ ต่อไปนี้
    1. Hibernate Configuration File (hibernate.cfg.xml)
    2. Hibernate Reverse Engineering File (hibernate.reveng.xml)
    3. Hibernate Console
    4. + Run Configuration
          สำหรับไฟล์ *.cfg.xml และ *.reveng.xml นั้น เราสามารถเขียน XML ได้เอง หรือจะใช้หน้าจอของ Eclipse เป็นตัวเริ่มต้นก็ได้ ขั้นตอนนี้ทำครั้งเดียวต่อ 1 project ต่อ 1 connection นะครับ ถ้า share code กันก็ไม่ต้องทำซ้ำแล้ว หรือถ้าเคยทำแล้วเอามาแก้เป็นของเราก็ง่ายดีเหมือนกัน


          ในส่วนของ Hibernate Console จะเป็นการรวมเอาไฟล์ด้านบนมาใช้ในการ generated ขั้นตอนนี้ทำ 1 project ต่อ 1 connection ต่อ 1 เครื่องครับ ไม่สามารถ share code กันได้
ไปที่ Hibernate Perspective

ทำ Hibernate Console (Add Configuration...)

tab Main : เลือก Project, เลือก hibernate.cfg.xml

tab Classpath : เลือก database driver ที่ตรงกับฐานข้อมูลที่ใช้ (ในที่นี้คือ MySQL)

สังเกตในแถบ Hibernate Configuration ควรเห็น Database ถ้า hibernate.cfg.xml ถูกต้อง
เลือก option ข้างปุ่ม run ที่มีรูป Hibernate และเลือก Hibernate Code Generation Configuration...

New launch configuration

tab Main เริ่มต้น

tab Main : เลือก console, เลือก folder ปลายทาง, กำหนด package, เลือก hibernate.reveng.xml

tab Exporter : ติ๊ก Java 5, EJB 3, Domain Code

เสร็จแล้วกด Run ได้เลย !!!

          เราจะพบกับไฟล์ UserAccount.java และ UserProfile.java ซึ่งคล้ายกับ Table user_account และ user_profile ตามที่ระบุใน hibernate.reveng.xml


          แต่ยังไม่จบแค่นี้.... หาก database มีการแก้ไข หรืออะไรก็ตามที่ทำให้เราต้อง generated Entity ใหม่ เราต้องแก้ไขไฟล์ hibernate.reveng.xml ซึ่งในส่วน table-filter จะเป็นการเลือก table ที่เราต้องการ generated ควรระบุเฉพาะบาง table ที่ต้องการเท่านั้น
<table-filter match-name="user_profile" match-catalog="test" />
<table-filter match-name="user_account" match-catalog="test" />
          และหากเป็น table ที่มีความสัมพันธ์กัน จะต้อง generated พร้อมกันทีเดียว คือใส่ table-filter หลายๆ table ในครั้งเดียว จะมีลักษณะตามตัวอย่างนี้ครับ **โค้ดนี้ gen มา อย่าหลับหูหลับตา copy ไปซะล่ะ**

Facebook Comment

Recent Posts

Popular post of 7 days

Portal คืออะไรกันนะ???

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

Popular

[Java] Java 8 DateTime ใหม่ ไฉไลกว่าเดิม

Portal คืออะไรกันนะ???

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

เรื่องของ ++i กับ i++

[Java] Java Static Variable และ Static Method

Push Notification คืออะไร มีวิธีทำอย่างไร (No Code)

พิมพ์ซองจากรายชื่อ excel ด้วยวิธี Mail Merge

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)