Я новичок в использовании инструмента GRAG для генерации классов Доменов для использования GRAILS, поэтому мне пришлось довольно сильно редактировать домены, чтобы заставить их работать со многими отношениями, и теперь все работаетза исключением того, что я не могу добавить какие-либо новые отношения во многие ко многим через Groovy.
Я в основном делаю эту программу, чтобы научиться использовать GRAG, так как я буду использовать ее на гораздо большембаза данных в будущем с тоннами отношений.Некоторое время я ломал голову над этим и не имел успеха.Итак, я прихожу к вам.
Краткое описание программы:
Домены:
Отношения:
Человек:
- hasMany Tasks
- hasMany Projects
Project:
- принадлежит человеку (необходим многим ко многим по некоторым причинам, я не совсем понимаю)
- имеет много людей
Задача:
Моя проблема в том, что я хочу назначить людей проектам, и все работает вплоть до вызова save () для модели проекта.
Вот действие addworker в ProjectController:
def addworker = {
def projectInstance = Project.get(params.id)
def workerInstance = Person.get(params.wid)
if(projectInstance){
if(workerInstance){
workerInstance.save()
projectInstance.workers.add(workerInstance)
if(!projectInstance.save(flush:true)){
flash.message ="WORKER ADDITION FAILED FOR WORKER ${workerInstance}"
}else{
flash.message ="Worker - ${workerInstance} - added."
}
redirect(action:"show", id:projectInstance.id)
}else{
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'person.label', default: 'Person'), params.wid])}"
redirect(action: "list")
}
}else{
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'project.label', default: 'Project'), params.id])}"
redirect(action: "list")
}
}
Когда я запускаю действие, я получаю флэш-сообщение с надписью «Рабочий - 1: TestWorker - добавлен», которое является рабочим, который уже существует вбаза данных, и при отладке, workerInstance и projectInstance оба имеют значения, как и следовало ожидать, и работники projectInstance дажедобавляет workerInstance перед сохранением.
по любой причине сохранение не сохраняет список работников.
Вот домен проекта:
class Project {
static mapping = {
table 'project'
// version is set to false, because this isn't available by default for legacy databases
version false
columns{
id column:'pro_id'
proName column:'pro_name'
proDesc column:'pro_desc'
workers joinTable:[name:'assignment',key:'pro_id',column:'p_id'],lazy:false
}
}
String proName
String proDesc
// Relation
static belongsTo = [Person]
static def hasMany = [workers: Person]
static constraints = {
proName(size: 1..45, blank: false)
proDesc(size: 0..255)
workers()
}
String toString() {
return "${id}: ${proName}"
}
}
Хотя это может быть неочевидно, я использую реляционную таблицу, все записи, которые она хранит, - это идентификатор человека и идентификатор проекта.Что мне нужно сделать, чтобы добавить новые наборы ключей в таблицу?Я подумал, что сопоставление позаботится об этом.
Я использую базу данных MySQL, и реляционная таблица называется «назначения». Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.Спасибо!