列挙型で任意の値をデータベースとやりとり

Domaは、これまでも列挙型には対応していました。
下記のような定義をした場合、データベースにはJobType#name()でかえってくるSALSESMANやMANAGERといった文字列をデータベースに格納し、データベースからはこれらの文字列を列挙型に変換していました。

@Entity
public class Employee {
    ...
    public JobType jobType;
}
public enum JobType {
    SALESMAN, 
    MANAGER, 
    ANALYST, 
    PRESIDENT, 
    CLERK;
}

この機能は生かしたまま、次のバージョン(1.7.0)からは、任意の値をデータベースに格納したり、任意の値から列挙型に戻したりできるようにしようと思います。方法や、列挙型に@EnumDomainを注釈して、規約に従っていくつかのメソッドを追加します(規約はコンパイル時にaptでチェックするのでまちがえてもすぐ気づけます)。これだけで、データベースには、01や02といった文字列を格納でき、逆に文字列から列挙型に戻せます。

@EnumDomain(valueType = String.class)
public enum JobType {

    SALESMAN("01"), 
    MANAGER("02"), 
    ANALYST("03"), 
    PRESIDENT("04"), 
    CLERK("05");

    private final String value;

    private JobType(String value) {
        this.value = value;
    }

    static JobType of(String value) {
        for (JobType jobType : JobType.values()) {
            if (jobType.value.equals(value)) {
                return jobType;
            }
        }
        throw new IllegalArgumentException(value);
    }

    String getValue() {
        return value;
    }
}

この例では、文字列をデータベースとやり取りしていますが、@EnumDomainのvalueType要素をかえるとintやDateなど好きな型で扱えます。
Javaでの表現とデータベース上での表現を完全に切り分けられるのがメリットです。

SNAPSHOTあります。
http://maven.seasar.org/maven2-snapshot/org/seasar/doma/doma/1.7.0-SNAPSHOT/doma-1.7.0-20100522.040824-3.jar