简体   繁体   中英

Hibernate, generate entities and database from mapping file

I was wondering if it was possible to generate entities from hibernate mapping file. My ultimate goal is to programmaticaly create a mapping file, and then create the database from it. I know that I can use :

<prop key="hibernate.hbm2ddl.auto">create</prop>

To create database form entities, but is there a way, (without eclipse tool, I need to do it automatically in the application) to generate entities from mapping? (Or even directly database from mapping).

I don't know if other tools can do it, but I though I would use Hibernate because of the cross database compatibility.

Thank you! Guillaume

You can use maven with the help of mojo plugins to generate Java entities by providing your hibernate mapping files.

Here is a sample maven project:

Create your maven project of this structure:

¦pom.xml
¦
+---src
¦   +---main
¦       +---java
¦       +---resources
¦           ¦   hibernate.cfg.xml
¦           ¦
¦           +---hbmFiles
¦                   Person.hbm.xml

The hibernate configuration file hibernate.cfg.xml is placed in YourProject/src/main/java/resources

The mapping files should be placed in resources or sub-directory of resources folder.

Contents of Person.hbm.xml file:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.mypackage.Person" table="person">
   <id name="id" column="id" type="int"/>
   <property name="name" column="name" type="string"/>
</class>
</hibernate-mapping>

Contents of hibernate.cfg.xml file:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <mapping resource="hbmFiles/Person.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

Contents of pom.xml file:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.hibernate.tutorials</groupId>
  <artifactId>MyProject</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>MyProject</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <build>
     <plugins>
        <plugin>
           <groupId>org.codehaus.mojo</groupId>
           <artifactId>hibernate3-maven-plugin</artifactId>
           <version>2.2</version>
           <executions>
             <execution>
              <phase>default</phase>
              <goals>
                <goal>hbm2java</goal>
              </goals>
             </execution>
            </executions>
           <configuration>
             <components>
              <component>
               <name>hbm2java</name>
               <implementation>configuration</implementation>
               <outputDirectory>generated-sources/hibernate3</outputDirectory>
              </component>
             </components>
             <componentProperties>
              <drop>true</drop>
              <ejb3>true</ejb3>
              <jdk5>true</jdk5>
             </componentProperties>
           </configuration>
        </plugin> 
     </plugins>
  </build>
</project>

The property - ejb3=true is useful if you need annotations in your generated java entity files. If annotations are not required then you can just remove the line - <ejb3>true</ejb3>

After creating these 3 file, you can run the command:

mvn clean hibernate3:hbm2java

Now maven generates the java entity files at path -

YourProject/generated-sources/hibernate3/..package_mentioned_in_hbm_files../Student.java

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM