2009/07/23

Grails App Engine Plugin + Gorm JPA Pluginでリレーションを定義してみる

Grails App Engine Plugin + Gorm JPA Pluginで、ひとまずリレーションのないドメインクラスを用意した場合の動作は確認できました。
 次はリレーションを追加してみることにしました。が、うまくいかない。
とりあえず試してみたことを列挙してみる。

環境

  • grails-1.1.1
  • groovy-1.6.3
  • java-1.6.0.14
  • app-engine-plugin-0.8.3
  • gorm-jpa-0.3

まずは単純に動くところまで

ゲンゾウ用ポストイット: Grails AppEngine PluginでJPAを使用する(成功)
にて、リレーションのないドメインが動くところまで。

リレーションを追加

ここからがおかしいのだろうと思う。まずは以下の2つのドメインを作成した。

  • com.sample.Book
  • com.sample.Category

コードは以下のとおり。

Book.groovy
package com.sample

import javax.persistence.*;

@Entity
class Book implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id
    
    String name
    
    String isbn

    @ManyToOne
    Category category

    
    static constraints = {
     id visible:false
 }
}
Category.groovy
package com.sample


import javax.persistence.*;

@Entity
class Category implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id

    String name 
    
    @OneToMany
    List<book> books;
    static constraints = {
    id visible:false
    }
}

あとはcontroller、viewを作成して実行。

  1. grails generate-all com.sample.Book
  2. grails generate-all com.sample.Book
  3. grails clean;grails app-engine

一応画面は起動してくる。

まずはCategoryControllerを起動してみる。

ありゃりゃ。なんだかわからないが、一度戻って再度起動してみる。すると。


よく分からないが起動できるようになった。新規登録してみる。

登録はできるのだが、肝心のBook情報がひもづけられない。
こちらは諦めてトップ画面からBookControllerを呼び出してみる。


すでに一度グライのエラーじゃ動じない。一度戻って再実行する。

新規登録してみる

画面からは先ほど登録したcategoryが選択可能になっている。これはいけるのでは?と思いつつ登録実行するとシステムエラー。でも一覧画面に戻ってみると…

うーん。もう何だか分からん。

もうちょっとapp engine plugin + gorm-jpaのドキュメントが増えてくれれば何とかなるかもだけど。もう少しJPAをじっくり勉強するべきか。GORM使えないとgrailsの魅力が半減している気がしてしょうがない。

GORMを捨てて奥さんが関西Groovy勉強会で説明してくれたJDOの方を選択しようかな。

0 件のコメント:

コメントを投稿