Grails: многие-ко-многим без hasMany / ownTo - вместо этого используется собственный 3NF - поиск по полному тексту - PullRequest
2 голосов
/ 29 ноября 2009

Я реализую отображение многих ко многим в Grails, используя 3NF, Не используется свойство hasMany или serveTo.

Взятый из этой статьи, он показывает и объясняет довольно много о его преимуществах.

Артикул: 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

 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» ко всем трем классам. но я получаю ошибки компиляции, когда я добавляю это свойство в класс QuestionTag, мышление связано с отсутствием "hasMany",

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

Q.2 Если я добавлю "hasMany", будет ли она генерировать еще одну таблицу, но я определил свою собственную. Или это будет ссылаться на мою таблицу QuestionTag, которую я сделал?

Q.3 В любом случае, с помощью 3NF я могу искать теги И задавать полный текст вопроса, а затем возвращать Вопросы, связанные с ключевыми словами поиска, которые соответствуют тегам или тексту.

...