ドメインで文字列のキーをIDにする

ドメインで文字列のキーをIDにするには、static mappingのidにgeneratorとプロパティ名、カラム名やデータ型の指定が必要。

Grailsで既存のシステムをいじれるようにするツールっぽいものの原型を作っていたのですが、なにせORマッパーなにそれ食えるのって世界で作られたシステムなので、テーブルにid列に相当するものがない。(既存システムはMyBatisで作成されていて、SQLXMLに直接記載されてる状態)

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"
 カラム  |          型           |  修飾語
                                                                                      • -
user_id | character varying(64) | not null name | character varying(64) | not null インデックス: "login_user_pkey" PRIMARY KEY, btree (user_id)

とりあえずはまあ、うまく行ったけど、「外部キーっぽいけどアプリ側でキー情報にしてるだけで、DB上は関係ないし、対応するレコードがあるかどうかもわからない」状態の参照関係をどうするか、とか、パスワード文字列をPostgreSQLの暗号化(pgp_crypt)で暗号化してるけどどうするかとか、まだまだ課題は山盛りです(;´∀`)