Mysql 圣杯;GRAG,多对多关系未正确保存
我不熟悉使用GRAG工具生成GRAILS使用的域类,到目前为止,我不得不大量编辑这些域,以使它们能够处理多对多关系,现在一切都正常了,只是我似乎无法通过Groovy在多对多关系中添加任何新的关系 我制作这个程序基本上是为了学习如何使用GRAG,因为将来我将在一个更大的数据库上使用它,数据库中有大量的关系。我在这方面已经努力了一段时间,但没有成功。所以我来找你 程序的快速描述:Mysql 圣杯;GRAG,多对多关系未正确保存,mysql,grails,many-to-many,gorm,Mysql,Grails,Many To Many,Gorm,我不熟悉使用GRAG工具生成GRAILS使用的域类,到目前为止,我不得不大量编辑这些域,以使它们能够处理多对多关系,现在一切都正常了,只是我似乎无法通过Groovy在多对多关系中添加任何新的关系 我制作这个程序基本上是为了学习如何使用GRAG,因为将来我将在一个更大的数据库上使用它,数据库中有大量的关系。我在这方面已经努力了一段时间,但没有成功。所以我来找你 程序的快速描述: 域: 人 计划 任务 关系: 人: 有许多任务 他有很多项目 项目: 属于某人(出于某种原因,需要多对多,我不
域:
- 人
- 计划
- 任务
- 有许多任务
- 他有很多项目
- 属于某人(出于某种原因,需要多对多,我不太明白)
- 有很多人
- 属于某人
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")
}
}
当我运行该操作时,我的flash消息显示为“Worker-1:TestWorker-added”,这是数据库中已经存在的一个Worker,调试时,workerInstance和projectInstance都具有我预期的值,projectInstance的Worker甚至在保存之前添加了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'
如果你需要更多的信息,请告诉我。谢谢大家! 我解决了我的问题,我试着做:
projectInstance.workers.add(workerInstance)
当我应该做的时候
projectInstance.addToWorkers(workerInstance)
我不知道groovy对此很挑剔,但我认为这是有道理的,我猜addToXXX方法将域转换为可用/可保存的形式,而不是对象。我解决了我的问题,我正在尝试:
projectInstance.workers.add(workerInstance)
当我应该做的时候
projectInstance.addToWorkers(workerInstance)
我不知道groovy在这方面很挑剔,但我认为这是有道理的,我猜addToXXX方法将域转换为可用/可保存的形式,而不是对象。我找到了解决方法,但它是脏的。在addworker操作中,我可以再次连接到DB,并使用数据在分配表上进行插入。我不喜欢在我的程序中使用硬编码的SQL,当然有一种类似于Grails的方法可以做到这一点?你可以看看。我找到了一种解决方法,但它很肮脏。在addworker操作中,我可以再次连接到DB,并使用数据在分配表上进行插入。我不喜欢在我的程序中使用硬编码的SQL,当然有一种类似于Grails的方法可以做到这一点?你可以看看。