列挙型で任意の値をデータベースとやりとり
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