2

hasManyまたはbelongsToプロパティを使用せずに、3NFを使用して多対多のマッピングをgrailsに実装しています。

この記事から抜粋して、その利点について多くのことを示し、説明しています。

記事: http: //burtbeckwith.com/blog/?p = 169

プレゼンテーションノート: http: //burtbeckwith.com/blog/files/169/gorm%20grails%20meetup%20presentation.pdf

私はこのような質問にタグシステムを作ろうとしています(stackoverflow :))

質問とタグを保存してから、それらとの関連付けを保存できますが、タグを使用して完全な質問を検索して提供できるようにしたいと思います。

質問、タグ、質問タグの3つのドメインクラスがあります

class Question {

  String title
  String content
  Date createdAt
  String tags

  static transients = ['tags']

}

タグクラス

class Tag {

    String name

    static constraints = {
        name(blank: false, maxSize: 40)
        name(unique: true)
    }
}

QuestionTagクラス

 class QuestionTag implements Serializable{

  Question question
  Tag tag

  static mapping = {
    table 'question_tags'
    version false
    id composite: ['question', 'tag']
  }

これらは、3つの正規化された形式で3つのテーブルを生成します

作品、質問、タグの数を保存します。

def question = new Question()
question.properties = params

question.save()

def tags = question.tags

tags.split(' ')?.each { tagName ->

   Tag tag = Tag.findByName(tagName) ?: new Tag(name: tagName).save()

   QuestionTag questionTag = new QuestionTag(question: question, tag: tag)
   QuestionTag.save(flush: true) 
}

Q.1「質問」とその「タグ」のセットをロードするにはどうすればよいですか?質問に関連付けられたタグが5つある場合。

ここで「searchable」プラグインをインストールし、「static searchable=true」を3つのクラスすべてに適用しました。しかし、そのプロパティをQuestionTagクラスに追加すると、コンパイルエラーが発生します。これは、「hasMany」の欠如に関係していると考えられます。

No converter defined for type [com.app.Question]

Q.2「hasMany」を追加すると、内部で別のテーブルが生成されますが、独自のテーブルを定義しました。それとも、私が作成したQuestionTagテーブルを参照しますか?

Q.3 3NFを使用すると、タグと質問の全文を検索して、タグまたはテキストに一致する検索キーワードに関連付けられた質問を返すことができます。

4

0 に答える 0