Gen-Entityでの日付型プロパティ
これまで、S2JDBC-GenのGen-Entityタスクは、日付型のカラムに対するプロパティは@Temporalつきのjava.util.Date型であるものとしてコードを生成してきました。こんな感じ。
import java.util.Date; ... @Entity public class Foo { /** idプロパティ */ @Id @Column(nullable = false, unique = false) public int id; /** dateプロパティ */ @Temporal(TemporalType.DATE) @Column(nullable = true, unique = false) public Date date; /** timeプロパティ */ @Temporal(TemporalType.TIME) @Column(nullable = true, unique = false) public Date time; /** timestampプロパティ */ @Temporal(TemporalType.TIMESTAMP) @Column(nullable = true, unique = false) public Date timestamp; }
見た目にはきれいなのですが、型を変換する際にアノテーションまでみないと正しく変換できないため、S2JDBCの外で使おうとすると使いにくいという問題を抱えています。また、S2JDBCを利用する場合であってもごく一部のAPIで@Temporalを使っていることを意識しなければいけませんでした。それともう1つ挙げると、@Temporal(TemporalType.TIMESTAMP)のjava.util.Dateでは、java.sql.Timestampならば保持できるナノ秒を保持できないという弱点もあります。
そこで、次のバージョン(2.4.34)からは、より型が硬いjava.sqlパッケージのDate、Time、Timestampを使ったコードを生成しようと思います。上のコードはこうなります。
import java.sql.Date; import java.sql.Time; import java.sql.Timestamp; ... @Entity public class Foo { /** idプロパティ */ @Id @Column(nullable = false, unique = false) public int id; /** dateプロパティ */ @Column(nullable = true, unique = false) public Date date; /** timeプロパティ */ @Column(nullable = true, unique = false) public Time time; /** timestampプロパティ */ @Column(nullable = true, unique = false) public Timestamp timestamp; }
エンティティがjava.sqlパッケージに依存することに抵抗を感じる人もいるかもしれません。その場合は、ビルドファイルでuseTemporalTypeにtrueを指定してもらえれば、これまでどおり@Temporalを使ったコードが生成されます。useTemporalTypeの指定例は次のとおりです。
<gen-entity rootPackageName="examples" useTemporalType="true" classpathRef="classpath" />