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に書きつけてあります。

以上です。

コメント