tezu memo blog

日々行った作業をメモしていきます

Grails GORM Domain作成・データ登録・確認

1.Domain作成

>grails create-domain-class jp.gr.java_conf.tezu.grails.ec.Member

| Loading Grails 2.1.1
| Configuring classpath.
| Environment set to development.....
| Created file grails-app/domain/jp/gr/java_conf/tezu/grails/ec/Member.groovy
| Created file test/unit/jp/gr/java_conf/tezu/grails/ec/MemberTests.groovy


2.Domainに属性を追加
dateCreatedとlastUpdatedはGrailsが登録・更新時に自動でタイムスタンプをセットする属性。詳細は 6 Object Relational Mapping (GORM) 2.2.0のAutomatic timestampingに書いてある

package jp.gr.java_conf.tezu.grails.ec

import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString
import groovy.transform.TupleConstructor

@ToString
//@EqualsAndHashCode
//@TupleConstructor
class Member {
    Date dateCreated // automatically set date/time when created
    Date lastUpdated // automatically set date/time when last updated

    String mail
    String firstName
    String lastName
    String password
    int sex;
    String tel
    String zip
    String prefectures
    String address1
    String address2
    String memo

    static constraints = {
        mail nullable:false,blank:false,unique:true
        firstName nullable:false,blank:false
        lastName nullable:false,blank:false
        password nullable:false,blank:false
        sex nullable:false
        tel nullable:false,blank:false
        zip nullable:false,blank:false
        prefectures nullable:false,blank:false
        address1 nullable:false,blank:false
        address2 nullable:true
        memo nullable:true
    }
}

@EqualsAndHashCodeと@TupleConstructorをコメントアウトしたのは、以下のエラーが発生したため
原因不明、、、

| Loading Grails 2.1.1
| Configuring classpath.
| Environment set to development.....
| Packaging Grails application....
| Running Grails application
grails-ec-admin load MockPersistenceContextInterceptor
| Error 2013-01-31 15:07:09,450 [localhost-startStop-1] ERROR pojo.BasicLazyInitializer  - Javassist Enhancement failed: jp.gr.java_conf.tezu.grails.ec.Member
Message: duplicate method: <init> in jp.gr.java_conf.tezu.grails.ec.Member_$$_javassist_0
    Line | Method
->>  514 | createClass3 in javassist.util.proxy.ProxyFactory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    491 | createClass2 in     ''
|    427 | createClass1 in     ''
|    399 | createClass  in     ''
|    334 | innerRun . . in java.util.concurrent.FutureTask$Sync
|    166 | run          in java.util.concurrent.FutureTask
|   1110 | runWorker .  in java.util.concurrent.ThreadPoolExecutor
|    603 | run          in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . .  in java.lang.Thread


3. 起動時に呼び出されるBootStrap.groovyでデータを登録

import jp.gr.java_conf.tezu.grails.ec.Member

class BootStrap {

    def init = { servletContext ->
        if (Member.count() != 0) {
            Member.getAll().each { entity ->
                entity.delete()
            }
        }
        def entity = new Member(mail:"xxxxx@gmail.com",firstName:"Taro",lastName:"Grails",password:"password",sex:1,tel:"0611112222",zip:"1008924",prefectures:"東京都",address1:"千代田区永田町1-10-1")
        if (!entity.save(flush:true)) {
            entity.errors.each { println it }
        }
    }
    def destroy = {
    }
}


4.確認用にGrails Plugin: Console PluginをInstall。起動後にConsoleControllerを選択
f:id:tezu35:20130131162136j:plain

jp.gr.java_conf.tezu.grails.ec.Member.list()

を入力して実行、右側にBootStrap.groovyで登録したデータを表示
f:id:tezu35:20130131162241j:plain