EclipseLinkでEntityクラスから、DDLを生成したところ、DDLの行末に;(セミコロン)が付与されないので、どうしたら付与されるか調べました。
結果
META-INF/persistence.xmlに、
<property name="eclipselink.ddlgen-terminate-statements" value="true" />
- 補足
eclipseLink version 2.6.0から有効です。
経緯
最初、付与する方法を調べていて、stackoverflowのこの記事を見つけ、 「org.eclipse.persistence.platform.database配下のクラスのサブクラスを作って、persistence.xmlにeclipselink.target-databaseを追加して読み込ませれば、付与できる」かと思ったのですが、おそらく
eclipselinkのバグのため?、サブクラスを作ったところで付与できず、あきらめてEclipseLinkをversionUpしました。
Javaからddl生成を行う
DDL生成に使用しているコードもついでに貼り付けます。
package xyz.monotalk.models.entity;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.eclipse.persistence.config.PersistenceUnitProperties;
public class DdlGenerater {
public static void main(String[] args) {
Map<String, String> persistProperties = new HashMap<String, String>();
persistProperties.put(PersistenceUnitProperties.DDL_GENERATION, "create-tables");
persistProperties.put(PersistenceUnitProperties.DDL_GENERATION_MODE, "sql-script");
persistProperties.put(PersistenceUnitProperties.APP_LOCATION, "./");
persistProperties.put("eclipselink.create-ddl-jdbc-file-name",
"/src/main/resources/db/migration/V1.0.0.0__Create_table.sql");
// From eclipseLink version 2.6.0 >>>>>>>>>
persistProperties.put("eclipselink.ddlgen-terminate-statements", "true");
// From eclipseLink version 2.6.0 <<<<<<<<<
EntityManagerFactory emf = Persistence.createEntityManagerFactory("POfDM_Local", persistProperties);
EntityManager em = emf.createEntityManager();
em.close();
}
}
DB接続情報はMETA-INF/persistence.xmlに書きつけてあります。
以上です。
コメント