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)