---
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