Java6(JDBC4.0)から追加されたjava.sql.Arrayなどのファクトリメソッドへの対応
Java6(JDBC4.0)からjava.sql.Connectionにjava.sql.ArrayのファクトリメソッドであるcreateArrayOfが追加されました。(同様にBlobを生成するcreateBlobとかClobを生成するcreateClobとかも追加されています。)
Domaでは、こんな風に呼び出せるようにしてみました。
@Dao(config = ItConfig.class) public interface SalEmpDao extends GenericDao<SalEmp> { @ArrayFactory(typeName = "integer") ArrayDomain<Integer> createIntegerArray(Integer[] elements); ... @BlobFactory BlobDomain createBlob(); ... }
Daoのメソッドに@ArrayFactoryや@BlobFactoryといったアノテーションをつけておきます。メソッドを呼び出すと対応するDomainのインスタンスに詰められて返されます。
PostgreSQLのドキュメントで使われているsal_empテーブル(http://www.postgresql.jp/document/pg837doc/html/arrays.html)を例にとると、sal_empテーブルに対応するEntityは次のように定義できて、
@Entity @Table(name = "SAL_EMP") public interface SalEmp { @Id StringDomain name(); ArrayDomain<Integer> pay_by_quarter(); BlobDomain<String[]> schedule(); }
sal_empテーブルへ新規追加するサンプルコードは次のようになります。
SalEmpDao dao = new SalEmpDao_(); Integer[] array = new Integer[] { 10, 20, 30, 40 }; SalEmp entity = new SalEmp_(); entity.name().set("hoge"); entity.pay_by_quarter().set(dao.createIntegerArray(array)); dao.insert(entity);
このサンプルを実行するとSQLのログはこうなります。
INFO 2009-07-02 00:23:56,015 [main] insert into SAL_EMP (NAME, PAY_BY_QUARTER, SCHEDULE) values ('hoge', '{"10","20","30","40"}', null)