とある理由により、以前、DerbyとかMySQLのIDENTITY的なカラムのHibernateのアノテーションでやったものとまったく同じ処理をPostgreSQLでやってみた。
基本的にはDerbyとかMySQLのIDENTITY的なカラムのHibernateのアノテーションと変わらないノリでやるんだけど、PostgreSQLはauto-incrementがないからOracleとかと同じくSequenceを使う。そうするとアノテーションの記述がちょっと変わってくる。
■auto-increment(MySQLとかDerbyとか)の場合
==============
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", unique = true, nullable = false)
public long getId() {
return this.id;
}
==============
■Sequence(PostgreSQLとかOracle)の場合
==============
@Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="hoge_seq")
@SequenceGenerator(name="hoge_seq", sequenceName="hoge_seq")
@Column(name = "id", unique = true, nullable = false)
public int getId() {
return this.id;
}
==============
実際にDB上に作ったSequenceを@SequenceGeneratorのsequenctNameに書く。
@GenerationValueのgeneratorはたぶんテキトーでいい。@SequenceGeneratorのnameと同じにしときゃいいんだと思う。ちょっと試したらいいんだろうけど、1分後には寝るので各自で試してください。筆者はめんどくさいから、実SEQと同じにしておいた。
以上、よろしくお願いいたします。
コメントする