Могу ли я изменить значение свойства из другого класса домена?- Грааль - PullRequest
1 голос
/ 12 января 2012

Я новичок в Граале.У меня проблема сейчас в моих классах домена.У меня есть 3 класса домена, класс Пациент , класс Медсестра и класс NursePatient , класс NursePatient представляет собой составной ключ, в котором можно увидетькто является обслуживающей медсестрой у пациента, поэтому если вы просматриваете ее таблицу, вы можете видеть только идентификаторы медсестер и пациентов.Это мой код для Nurse класса:

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

    }


}

}

-> Меня попросили напечатать список медсестер, у которых нет пациента.Я думал, что в момент сохранения в таблице с помощью метода saveIt () из класса NursePatient , после успешного выполнения save () значение изменится насвойство простоя класса медсестра с истина до ложь , так что запросы намного проще.Моя проблема заключается в том, что мой код в классе NursePatient правильный, или можно изменить значение свойства из другого класса.Пожалуйста, помогите мне .. спасибо !!

1 Ответ

1 голос
/ 12 января 2012

Изменение свойств классов доменов внутри разных классов - это хорошо.

Однако вам не нужен класс NursePatient.Если вы объявите отношения между медсестрами и пациентами как многие ко многим, например:

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

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

, Grails автоматически создаст и обновит необходимую таблицу соединений.Затем вы можете запросить всех медсестер без пациентов, используя Criteria API :

def nursesWithoutPatients = Nurse.withCriteria { isEmpty("patients") }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...