我是使用GRAG工具生成GRAILS使用的Domain類的新手,到目前爲止我不得不編輯這些域以便讓它們工作與多對多的關係,現在一切正常,除了我似乎無法通過Groovy在多對多關係中添加任何新關係。Grails&GRAG,多對多的關係沒有妥善保存
我基本上是讓這個程序學習如何使用GRAG,因爲我將在一個更大的數據庫中使用它,並且有很多關係。我一直在這一段時間裏一直沒有成功。所以我來找你。
程序的簡單描述:
域:
- 人
- 項目
- 任務
關係:
人:
個- 的hasMany任務
- 的hasMany項目
項目:
- 屬於關聯人士(所需的許多一對多出於某種原因,我不太瞭解)
- has許多人
任務:
- 屬於關聯人
我的問題是我想派人項目和一切工作的權利,直到我打電話保存()在項目模型。
繼承人在ProjectController的addworker行動:
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}"
}
}
雖然它可能不是很明顯我使用一個關係表,它的所有條目保持狀態的一個人,ID的id項目。 有什麼特別的我必須做的將新的密鑰集添加到表中?我想映射會照顧到這一點。
我正在運行一個mysql數據庫,關係表被命名爲'assignments' 如果您需要更多信息,請讓我知道。謝謝!
我發現了一個工作,但它很髒。 在addworker行爲中,我可以再次連接到數據庫,並在數據表上插入賦值表。我不喜歡在我的程序中使用硬編碼的SQL,肯定有一種Grails式的方式來做到這一點? – Damon 2011-02-22 18:05:09