ドメインで文字列のキーをIDにする
ドメインで文字列のキーをIDにするには、static mappingのidにgeneratorとプロパティ名、カラム名やデータ型の指定が必要。
Grailsで既存のシステムをいじれるようにするツールっぽいものの原型を作っていたのですが、なにせORマッパーなにそれ食えるのって世界で作られたシステムなので、テーブルにid列に相当するものがない。(既存システムはMyBatisで作成されていて、SQLはXMLに直接記載されてる状態)
id列やversion列は消して、idとしてはUSER_IDという文字列を使うようにいろいろ試行錯誤した結果、こんな感じにたどり着きました。
class LoginUser { String userId String name String toString() { userId } static constraints = { userId unique:true, maxSize:64 name maxSize:64 } static mapping = { table 'login_user' version false id generator:'assigned', name:'userId', column: 'user_id', type: 'string' } }
で、実際の列はどうなってるかというとこうなります。(DBはPostgreSQL9.1を使用)
# \d login_user テーブル "public.login_user" カラム | 型 | 修飾語
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
とりあえずはまあ、うまく行ったけど、「外部キーっぽいけどアプリ側でキー情報にしてるだけで、DB上は関係ないし、対応するレコードがあるかどうかもわからない」状態の参照関係をどうするか、とか、パスワード文字列をPostgreSQLの暗号化(pgp_crypt)で暗号化してるけどどうするかとか、まだまだ課題は山盛りです(;´∀`)