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

          การสร้าง Hibernate Entity ผ่าน Eclipse (สร้าง Hibernate Entity ด้วยวิธี Reverse Engineering) นั้นอาจจะดูยุ่งยาก เพราะมีขั้นตอนค่อนข้างเยอะ อีกทั้งยังไม่สามารถ share code ร่วมกัน หรือจะเก็บไว้ใช้ในโปรเจคอื่นก็ลำบาก โพสนี้ผมจะมาแชร์วิธีการที่สะดวกมากขึ้น เพราะเราจะ generated Entity ด้วย maven กัน

          Maven ไม่ได้เป็นแค่ dependency สำหรับ library เท่านั้น แต่ยังมี dependency ประเภท plugin ทำให้เพิ่มความสามารถของ maven เข้าไปอีก(Maven Plugin) เช่น เราสามารถดึง application server มาใช้ทดสอบโดยไม่ต้องโหลดมาติดตั้งแยก (Wildfly Maven Plugin) หรือ เราจะทำ war file ที่มี configuration สำหรับ production แบบพร้อมใช้งาน (Maven WAR Plugin) เป็นต้น

          สำหรับโพสนี้เราจะมาใช้ Maven AntRun Plugin สำหรับ generate Hibernate Entity แบบ pure code กัน ไม่ต้องยุ่งกับเครื่องมือของ editor อะไรอีก และได้ใช้ความสามารถของ Hibernate Reverse Engineering ด้วย ทีนี้เราก็สามารถส่งต่อ config ไปใช้กันภายในทีม หรือจะเผื่อใช้ในโปรเจคอนาคตก็ได้เช่นกัน

ก่อนจะเริ่มทำตามตัวอย่าง อยากให้แน่ใจก่อนว่ารู้จัก keyword ต่อไปนี้ซะก่อน
  • OR-Mapping
  • Hibernate Entity Class
  • Hibernate Config
  • Hibernate Reverse Engineering
ถ้ายังไม่รู้จัก แนะนำให้ย้อนไปอ่านโพสเก่าก่อนครับ 

<!-- pom.xml -->
<project>

    <!-- ... -->

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution> <!--mvn antrun:run@hbm2java-->
                        <id>hbm2java</id>
                        <phase>none</phase>
                        <configuration>
                            <target>
                                <echo message="Start generating entities .."/>
                                <taskdef name="hibernatetool"
                                         classname="org.hibernate.tool.ant.HibernateToolTask"/>

                                <hibernatetool
                                        destdir="src/main/java">
                                    <jdbcconfiguration
                                            revengfile="src/main/resources/hibernate.reveng.xml"
                                            packagename="th.in.lordgift.model.entity"
                                            detectmanytomany="true"
                                            configurationfile="src/main/resources/hibernate.cfg.xml"/>
                                    <hbm2java destdir="src/main/java" jdk5="true" ejb3="true"/>
                                </hibernatetool>
                                <echo message="End generating entities"/>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>

                <dependencies>
                    <dependency>
                        <groupId>org.hibernate</groupId>
                        <artifactId>hibernate-core</artifactId>
                        <version>5.2.5.Final</version>
                    </dependency>
                    <dependency>
                        <groupId>org.freemarker</groupId>
                        <artifactId>freemarker</artifactId>
                        <version>2.3.28</version>
                    </dependency>
                    <dependency>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                        <version>1.1</version>
                    </dependency>
                    <dependency>
                        <groupId>commons-collections</groupId>
                        <artifactId>commons-collections</artifactId>
                        <version>3.2.1</version>
                    </dependency>

                    <dependency>
                        <groupId>org.postgresql</groupId>
                        <artifactId>postgresql</artifactId>
                        <version>42.2.2</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>
รันคำสั่งใน command-line
mvn antrun:run@hbm2java
เราจะพบกับไฟล์ Entity Class ตามที่เรา config ไว้ที่ hibernate.reveng.xml และได้ data type ตรงตาม type mapping

ข้อควรระวัง !!
          dependency ของ project กับของ plugin เป็นอิสระต่อกัน เพราะฉะนั้นแล้ว library ที่ใส่เพื่อใช้ใน project ไม่ได้ส่งผลมาถึง plugin อาจจำเป็นจะต้องใส่ทั้ง 2 ที่ ถ้าใช้ library ตัวเดียวกัน เช่น database driver, hibernate-core เป็นต้น


ref.
https://eugencovaciq.wordpress.com/2016/02/01/hibernate-tools-reverse-engineering-using-maven/

Facebook Comment

Recent Posts

Popular post of 7 days

[Java] รู้จัก OR-Mapping และ Hibernate เบื้องต้น

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

Android Auto & Apple Carplay คืออะไร ใช้งานยังไง

Popular

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

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

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

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

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

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

[Java] Java Static Variable และ Static Method

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

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

ความเร็วเน็ตที่แท้จริง Mbps MBps ???