Doltengでこんなことができるといいなぁ

Doltengで以前からこんなことができるといいなぁと
感じていたものをフィードバックとして書いてみる。

複数プロジェクト対応

フロントや管理用といったEntityパッケージ等の
共通パッケージを持たないwebアプリプロジェクト、
そして、複数のwebアプリから共有される共通プロジェクト、
さらに、各プロジェクトを管理・統括する
親プロジェクトを生成する。


実際に、このあたりの複数プロジェクトの構成で
困っている人は多いんじゃぁないかと思う。
Eclipse、Sysdeo・WTPMaven2等のバランスを
取りながら考えることが多く、一筋縄ではいかない。

レイアウト&Kumuライブラリ

レイアウトの雛形、および、Kumuのライブラリを
新規プロジェクト生成時に含めるかどうかを選択できる機能。

View On Serverのデフォルトキーバインド

HTMLファイルを開いた状態から対応するWebブラウザを開く
View On Servier は良く利用するので、
デフォルトのキーバインディングが欲しいところ。
あと、特に問題がなければPageクラスでも
View On Servierできると便利かも。

Teedaのサブアプリケーションの作成機能

ディレクトリとパッケージが作成され、
AbstractPageと Dxo の雛形が作られる。
AbstractPage には Dxoが DIされている。
Dxoを使用するしないは選択式がよさそう。)

S2JDBCでジェネレーション ギャップ パターン

エンティティは @MappedSuperclass が指定されたクラスを継承できます。

@MappedSuperclass には、エンティティと同じように永続プロパティを定義できます。 定義された永続プロパティは、サブクラスの永続プロパティとみなされます。 スーパークラスとサブクラスでインスタンスフィールドの名前が重複しないように定義してください。


S2JDBC でもジェネレーション ギャップ パターンが動作するようですね。
サクッと対応させて検証してみたところ、無事に動作しました。

オリジナルの Empエンティティ

Emp.java

package sample.entity;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;

@Entity
public class Emp {

    @Id
    @GeneratedValue
    public Integer id;

    public String name;

    @Temporal(TemporalType.DATE)
    public Date hireDate;
    
    public Integer deptId;

    @ManyToOne
    public Dept dept;

    @Version
    public Integer versionNo;
}

ジェネレーション ギャップ パターンに対応させた Empエンティティ

AbstractEmp.java

package sample.entity.base;

import java.util.Date;

import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;

import sample.entity.Dept;

@MappedSuperclass
public class AbstractEmp {

    @Id
    @GeneratedValue
    public Integer id;

    public String name;

    @Temporal(TemporalType.DATE)
    public Date hireDate;
    
    public Integer deptId;

    @ManyToOne
    public Dept dept;

    @Version
    public Integer versionNo;
}


Emp.java

package sample.entity;

import javax.persistence.Entity;

import sample.entity.base.AbstractEmp;

@Entity
public class Emp extends AbstractEmp {

}