UUID
java2 SE5.0からはjava.util.UUID*1が追加された。
理論上世界で唯一のものとなるらしいので*2、永続化するときのIDとするには適切なのかもしれない。
現状うちのアプリでは主キーを持たないテーブルではSEQをまわしてIDとして、レコードはそのうち廃棄することにしている。
ただ、SEQが1週したらどうなるの?という問題はあって(1週するには10数年かかる見込みではあるが)、実装者としてはいささか落ち着かないものであることも確かだ。
そこでUUIDを使用すれば、そのような心配がなくなるわけだ。
このUUIDはhibernateのgeneratorクラスとしても指定できる*3。
org.hibernate.id.UUIDHexGeneratorクラスがその生成ロジックだ。
SEQを自作するよりかは使いやすいかもしれないけど、気になるのはパフォーマンスかなぁ。
あとはトラブった時に、レコードがどの順番で作成されたのかがわかるかどうかというところか。
参考
唯一のキー(ID)を作成する方法について*4
Hibernateで理解するO/Rマッピング(5)*5
*1:http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/UUID.html
*2:http://www.atmarkit.co.jp/icd/root/52/94084052.html
*3:http://www.hibernate.org/hib_docs/v3/reference/en/html/mapping.html#mapping-declaration-id
*4:http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27238&forum=12
*5:http://www.atmarkit.co.jp/fjava/rensai3/ormap05/ormap05_1.html