views:

616

answers:

0

I am implementing a many-to-many mapping in grails using 3NF, Not using the hasMany or belongsTo property.

Taken from this article it shows and explains quite a lot about its advantages.

Article: http://burtbeckwith.com/blog/?p=169

Presentation notes: http://burtbeckwith.com/blog/files/169/gorm%20grails%20meetup%20presentation.pdf

I'm trying to make a Tag system onto questions, kind of like this(stackoverflow :))

I can save the Question and the Tags, then save the association with them, but now I want to be able to search and serve up a full Question with Tags,

I have 3 domain classes - Question, Tag and QuestionTag

class Question {

  String title
  String content
  Date createdAt
  String tags

  static transients = ['tags']

}

Tag Class

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']
  }

These produce 3 tables, in 3 normalized form

Saving works, a question and number of tags.

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 How can I load a "Question" along with its set of "Tags"? if there were 5 tags associated with the Question.

Now I installed the "searchable" plugin, I applied the "static searchable=true" to all three classes. but I get compile errors when I add that property to the QuestionTag class, thinking is has to do with the lack of "hasMany",

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

Q.2 If I add "hasMany" will it generate another table under-the-hood, yet I have defined my own. Or will it reference my QuestionTag table that I made?

Q.3 Using the 3NF is there anyway I can search for Tags AND Question full text, then return the Questions associated with the search keywords that match Tags or text.