Я реализую отображение многих ко многим в 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 я могу искать теги И задавать полный текст вопроса, а затем возвращать Вопросы, связанные с ключевыми словами поиска, которые соответствуют тегам или тексту.