我是grails的新手,仍然试图围绕对象的映射。在我们的项目中,我们有三个类导致一些问题Attendee
,Vendor
和Person
与会者有一个人,供应商有很多人,所以我们采用以下设置: / p>
class Person{
String firstName
//Other details...
}
class Attendee {
Person person
}
class Vendor{
static hasMany = [
person:person
]
}
因此,对象通过Web表单进行水合,我可以确认person
详细信息是从日志语句中提取的。但是我们收到以下错误:
Message ORA-01400: cannot insert NULL into ("EIGHT_STATES_USER"."ATTENDEE"."PERSON_ID")
所以我们根据我们阅读的stackoverflow将static belongsTo = [attendee: Attendee, vendor: Vendor]
添加到Person
。但是当我们尝试保存Attendee
时,它想创建一个Vendor
。
不知道从哪里开始。
答案 0 :(得分:1)
您当前定义它的方式,您需要先保存Person对象,然后将其添加到Attendee并保存。你不需要personTo in Person。
class Person {
String firstName
//Other details...
}
class Attendee {
Person person
}
class Vendor {
static hasMany = [
people:Person
]
}
def person = new Person(params)
if (person.save(flush:true)) {
def attendee = new Attendee(params)
attendee.person = person
attendee.save(flush:true)
}
答案 1 :(得分:1)
尝试向Attendee对象添加映射:
Person person
static mapping = {
person cascade: "all"
}
有关自定义映射的更多信息,请访问:http://grails.org/doc/2.3.x/guide/GORM.html#customCascadeBehaviour