Grails映射对象

时间:2014-04-01 14:18:52

标签: grails gorm

我是grails的新手,仍然试图围绕对象的映射。在我们的项目中,我们有三个类导致一些问题AttendeeVendorPerson与会者有一个人,供应商有很多人,所以我们采用以下设置: / 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

不知道从哪里开始。

2 个答案:

答案 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