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
& lt; book & gt; books;
static constraints = {
id visible: false
}
}
あとはcontroller、viewを作成して実行。
$ grails generate-all com.sample.Book
$ grails generate-all com.sample.Book
$ grails clean;grails app-engine
一応画面は起動してくる。
まずはCategoryControllerを起動してみる。
なんだかわからないが、一度戻って再度起動してみる。すると。
よく分からないが起動できるようになった。新規登録してみる。
登録はできるのだが、肝心のBook情報がひもづけられない。こちらは諦めてトップ画面からBookControllerを呼び出してみる。
すでに一度ぐらいのエラーじゃ動じない。一度戻って再実行する。
新規登録してみる
画面からは先ほど登録したcategoryが選択可能になっている。これはいけるのでは?と思いつつ登録実行するとシステムエラー。でも一覧画面に戻ってみると…
うーん。もう何だか分からん。
もうちょっと App Engine Plugin + Gorm-JPA のドキュメントが増えてくれれば何とかなるかもだけど。もう少しJPAをじっくり勉強するべきか。 Gorm 使えないと Grails の魅力が半減している気がしてしょうがない。
Gormを捨てて、奥さんが関西Groovy勉強会で説明してくれた JDO の方を選択しようかな。
ディスカッション
コメント一覧
まだ、コメントがありません