我是使用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