--- title: MavenでJPAのエンティティからDDLファイルをエクスポートする tags: ["JPA", "Java", "Maven"] categories: ["Programming", "Java", "JPA"] date: 2014-04-15T18:49:18Z updated: 2014-04-15T18:49:18Z --- [Hibernate ToolsのAnt Plugin][1]を使ってmaven-antrun-pluginをたたく。hibernate3-maven-pluginは公式プラグインではなく更新されていない。 pom.xmlに以下のdependencyを追加して、 ```xml org.hibernate hibernate-tools 4.3.1.CR1 test commons-logging commons-logging ``` Hibernate4.2(JPA2.0)系を使っていのであればhibernate-toolsのバージョンを`4.0.0-CR1`にしないとダメっぽい。 以下のようにantrun-pluginの設定を追加。 ```xml maven-antrun-plugin 1.7 test-compile run ``` 以下のsrc/main/resources/persistence.xmlを作成(すでに存在する場合は`...`を追加)。 ```xml ``` `hibernate.dialect`の部分に対象のDBに対応したDialectを指定する。 あとは ```bash mvn test -Dmaven.test.skip=true ``` で`target/generated-ddl/generated-ddl.sql`にDDLファイルができる。 JPA2.1から導入されたインデックスの設定にも対応していていいね。 ```java import javax.persistence.*; import java.util.Date; @Data @AllArgsConstructor @NoArgsConstructor @Entity @Table(name = "todo", indexes = { @Index(columnList = "todoTitle"), @Index(columnList = "createdAt") }) public class Todo { @Id @GeneratedValue private Long todoId; private String todoTitle; private boolean finished = false; @Temporal(TemporalType.TIMESTAMP) private Date createdAt; @Version private Long version; } ``` こういうEntityを定義すると、↓のようなDDLが出力される。 ```sql create table todo ( todo_id bigint not null auto_increment, created_at datetime, finished bit not null, todo_title varchar(255), version bigint, primary key (todo_id) ) ENGINE=InnoDB; create index UK_1wvlyean1whba3mcxi7phfocs on todo (todo_title); create index UK_l1w8vw94pip9w18mivisdnvf3 on todo (created_at); ``` [1]: http://docs.jboss.org/tools/4.1.0.Final/en/hibernatetools/html_single/index.html#ant