我可以从另一个域类更改属性的值吗? - grails

时间:2012-01-12 03:36:33

标签: grails composite-key grails-domain-class

我是grails的新手。我现在在我的域类中遇到问题。我有3个域类,类患者,类护士和类 NursePatient ,类 NursePatient 是复合键在那里你可以看到谁是病人的主治护士,所以如果你查看它的表,你只能看到护士和病人的身份。这是护士类的代码:

class Nurse {

String name
Nurse partner
boolean idle = true

static belongsTo = [hospital: Hospital]

static constraints = {

    name(blank:false)
    partner(nullable:true)
    hospital(nullable:false)

}

String toString(){

    "Nurse ${name}"

}


}

- >这是 NursePatient 的域名类:

class NursePatient implements Serializable{


Nurse nurse
Patient patient

static mapping = {

    version false
    id composite:['nurse', 'patient']
}

static constraints = {
    patient(nullable:false, validator:{val, obj -> val.hospital == obj.nurse.hospital})
    nurse(nullable:false)
}

String toString(){

    "Nurse ${nurse.name} - ${patient.name}"

}

void saveIt(Nurse x, Patient y){

    def np = new NursePatient(nurse: x, patient: y)

    if(np.save()){

       def n = nurse.get(nurse.id)
       n.idle = false

    }


}

}

- >我被要求打印一份没有病人的护士名单。我想当我使用 NursePatient 中的 saveIt()方法保存在表格中的那一刻,一旦 save()成功,它就会改变类护士的属性空闲值从 true false ,以便查询更容易。我的问题是,如果我的类 NursePatient 中的代码是正确的,或者是否可以从另一个类更改属性的值,我就不会这样做。请帮帮我..谢谢!!

1 个答案:

答案 0 :(得分:1)

更改不同类中的域类的属性很好。

但是,您并不需要NursePatient课程。如果你宣布护士和患者之间的关系是多对多的,就像这样:

class Nurse {
    static hasMany = [patients: Patient]
    ...
}

class Patient {
    static hasMany = [nurses: Nurse]
    ...
}

然后Grails将自动创建和更新所需的连接表。然后,您可以使用Criteria API查询所有没有患者的护士:

def nursesWithoutPatients = Nurse.withCriteria { isEmpty("patients") }