しおしお

IntelliJ IDEAのことなんかを書いてます

IntelliJ IDEAのDatabase WindowからDoma2用Entityを生成する

IntelliJ IDEAのDatabase WindowsからDoma2用のEntityを生成してみたお話です。

IntelliJのデフォルトの状態だと下の画像のようにGenerated POJOsしか選択できません。ここに、Doma2用のEntityを生成するスクリプトを追加してEntityを生成できるようにします。
f:id:sioiri:20181004063440p:plain

Doma2のEntity生成用スクリプトIntelliJに登録する

DatabaseウィンドウからDoma2のエンティティテンプレートを生成するやつ · GitHubからGenerate Doma Entity.groovyをダウンロードして、IntelliJに登録します。
IntelliJへの登録は、下の画像のようにProjectウィンドウのScratches and Consolesの中のExtensions->Database Tools and SQL->schemaの中に配置するだけです。
f:id:sioiri:20181004083408p:plain

Entityを生成する

生成したいテーブルを右クリック->Scripted Extensions->Generate Doma Entity.groovyを選択します。保存場所を聞かれるので好きな場所を選びます。
f:id:sioiri:20181004090824p:plain

生成される内容

生成対象のテーブル定義
create table test_table
(
	id bigserial not null
		constraint test_table_id_pk
			primary key,
	name varchar(255) not null,
	age smallint not null,
	birthday date not null,
	created timestamp not null
)
生成されるEntity
package com.sample;

import org.seasar.doma.Entity;
import org.seasar.doma.Table;
import org.seasar.doma.Id;
import org.seasar.doma.GeneratedValue;
import org.seasar.doma.GenerationType;

@Entity(immutable = true)
@Table(name = "test_table")
public class TestTableEntity {
              
    @Id
    public final Long id;

    public final String name;

    public final Short age;

    public final java.time.LocalDate birthday;

    public final java.time.LocalDateTime created;

    public TestTableEntity(Long id, String name, Short age, java.time.LocalDate birthday, java.time.LocalDateTime created) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.birthday = birthday;
        this.created = created;
    }

}

生成されるEntityで微妙なところ

  • パッケージ名がcom.sample固定なので、必ず変更が必要
  • PostgreSQLのserialが採番カラムとして判断できずGeneratedValueがつかない(他のデータベースの自動採番カラムは未確認)

おわり