Grails 0.5のsampleアプリrecipes編
さて、こちらもbookmarksサンプル同様「grails upgrade」して「grails run-app」。
こちらは普通に動作しました。
recipesサンプルですが、Grails 0.42とは違って、grails-app/domainがありません(ドメインクラスがありません)。で、どこにあるかというと、src/java/com/recipesディレクトリに、普通のJavaクラスとしてあります(POJOということ)。アノテーションを使って、ドメインクラス(エンティティ?)であることを指定しているようです。
package com.recipes;import javax.persistence.Entity;
@Entity
public class Recipe {
クラス自体は、setter, getterを持つクラスです。違うところは、アノテーションでいくつか設定をしているところでしょうか。
idはこんな感じで、IDであること、値を自動生成することを明示的に指定しています。
@Id
@GeneratedValue
public Long getId() {
return id;
}
N:1関連はこんな感じで。
@ManyToOne
public Recipe getRecipe() {
return this.recipe;
}
制約自体は、別のファイルに記述するようです。名前は、[クラス名] + "Constraints.groovy"みたいです。Recipeクラス場合は、RecipeConstraints.groovyとなり、従来の制約のみ記述を記述します。
constraints = {
title(blank:false)
description(blank:false)
date(nullable:false)
}
ただ、これだけではドメインクラスとして扱ってもらうには不十分なようで、
- 「アノテーションを使いますよ」と宣言
- 設定ファイルを作成
をする必要があります。前者は、grails-app/conf/*DataSource.groovyに、
と記述します。後者は、hibernate/hibernate.cfg.xml
class DevelopmentDataSource {
def configClass = GrailsAnnotationConfiguration.class
に、という感じでパッケージ名とクラス名を設定します。