[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:[email protected]>
                        <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:[email protected]
เราจะพบกับไฟล์ 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

Popular post of 7 days

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

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

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