Hibernate3-maven-plugin – hbm2ddl
Hibernate3-maven-plugin – hbm2ddl
Wygenerowanie skryptu DDL (z ang. Data Definition Language) na podstawie definicji klas oznaczonych odpowiednio adnotacjami JPA to zadanie które można zrealizować w zasadzie na dwa podstawowe sposoby. Zaczniemy od konfiguracji pluginu hbm2ddl. Tworzymy nowy projekt Spring Boot – niezbędne zależności – plik pom.xml:
<dependencies> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>javax.persistence</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.3.0.Final</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.199</version> </dependency> </dependencies>
Plugin hbm2ddl – generuje schemat DDL w katalogu ./schema. Uruchaminy jest w fazie process-classes czyli również podczas budowania paczki wynikowej:
<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>hibernate3-maven-plugin</artifactId> <version>2.2</version> <executions> <execution> <phase>process-classes</phase> <goals> <goal>hbm2ddl</goal> </goals> </execution> </executions> <configuration> <components> <component> <name>hbm2ddl</name> <implementation> jpaconfiguration </implementation> <outputDirectory> /schema </outputDirectory> </component> </components> <componentProperties> <persistenceunit>userPU</persistenceunit> <outputfilename>db-schema.ddl</outputfilename> <drop>false</drop> <create>true</create> <export>false</export> <format>true</format> </componentProperties> </configuration> </plugin> </plugins> </build>
Klasa modelu:
package model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "leader_user") public class User { @Id @GeneratedValue Integer id; String name; String surname; public User() { } // setters & getters }
Klasa demonstracyjna:
public class Start { private static EntityManager em; public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("userPU"); em = emf.createEntityManager(); createAndSaveSampleUsers(em); em.close(); } public static void createAndSaveSampleUsers(EntityManager entityManager) { User james = new User("james", "spring"); User alice = new User("alice", "li"); User tom = new User("tom", "guim"); em.getTransaction().begin(); entityManager.persist(james); entityManager.persist(alice); entityManager.persist(tom); em.getTransaction().commit(); } }
Plik persistence.xml:
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="userPU"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.connection.url" value="jdbc:h2:file:./Database;DB_CLOSE_ON_EXIT=FALSE; AUTO_SERVER=TRUE" /> <property name="hibernate.connection.driver_class" value = "org.h2.Driver" /> <property name="hibernate.connection.username" value = "sa" /> <property name="hibernate.connection.password" value = "password" /> <property name="hibernate.archive.autodetection" value = "class" /> <property name="hibernate.show_sql" value = "true" /> <property name="hibernate.format_sql" value = "true" /> <property name="hibernate.hbm2ddl.auto" value = "update" /> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" /> <property name="javax.persistence.schema-generation.scripts.action" value = "drop-and-create" /> <property name="javax.persistence.schema-generation.scripts.create-target" value = "db-schema.jpa.ddl" /> <property name="javax.persistence.schema-generation.scripts.drop-target" value = "db-schema.jpa.ddl" /> </properties> </persistence-unit> </persistence>
Uruchomienie pluginu:
mvn hibernate3:hbm2ddl
Wynik:
[INFO] writing generated schema to file: C:\Users\mwarycha\Desktop\projects\JavaLeader.pl\hbm2ddl\schema\db-schema.ddl create table leader_user ( id integer generated by default as identity, name varchar(255), surname varchar(255), primary key (id) ); [INFO] schema export complete
Innym sposobem na wygenerowanie schematu DDL jest użycie odpowiednich właściwości w pliku persistence.xml:
<property name = "javax.persistence.schema-generation.scripts.action" value = "drop-and-create" /> <property name = "javax.persistence.schema-generation.scripts.create-target" value = "db-schema.jpa.ddl" /> <property name = "javax.persistence.schema-generation.scripts.drop-target" value = "db-schema.jpa.ddl" />
Wtedy zależności w pliku pom.xml przedstawiają się następująco standard JPA 2.1 wspierany jest przez Hibernate od wersji 4.3 – http://hibernate.org/orm/releases/
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.3.0.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.0.Final</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.199</version> </dependency>
Plik DDL który zostanie wygenerowany to db-schema.jpa:
create table leader_user ( id integer generated by default as identity, name varchar(255), surname varchar(255), primary key (id) )
Leave a comment