Grails:没有hasMany / belongsTo的多对多 - 而是使用原生3NF - 搜索全文

时间:2009-11-28 22:46:28

标签: grails many-to-many normalization tagging 3nf

我正在使用3NF在grails中实现多对多映射, 不使用hasMany或belongsTo属性。

从这篇文章中可以看出并解释了很多关于它的优点。

文章:http://burtbeckwith.com/blog/?p=169

演示说明:http://burtbeckwith.com/blog/files/169/gorm%20grails%20meetup%20presentation.pdf

我正在尝试将一个Tag系统放到问题上,有点像这样(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

 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个标签与问题相关联。

现在我安装了“可搜索”插件,我将“static searchable = true”应用于所有三个类。但是当我将该属性添加到QuestionTag类时,我收到编译错误, 思考与缺乏“hasMany”有关,

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

Q.2 如果我添加“hasMany”,它会在引擎盖下生成另一个表,但我已经定义了自己的表。或者它会引用我制作的QuestionTag表吗?

Q.3 无论如何,使用3NF我可以搜索标签和问题全文,然后返回与标签或文字匹配的搜索关键字相关的问题。

0 个答案:

没有答案