我是grails的新手。我的域类现在有问题。我有三个域类,类Patient、类NursePatient类<strong+NursePatient>,类NursePatent是一个复合键,您可以在其中查看谁是患者的主治护士,因此如果您查看其表,则只能查看护士和患者的id。这是我为护士类编写的代码:
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()功,它就会将类Nurse的属性idle值从true更改为false,这样查询就更容易了。我的问题是,如果类NursePatient中的代码是正确的,或者是否可以从另一个类更改属性的值,我就不知道了。请帮帮我…谢谢!!
在不同的类中更改域类的属性是可以的。
但是,您并不真正需要NursePatient
类。如果你声明护士和患者之间的关系是多对多的,比如这样:
class Nurse {
static hasMany = [patients: Patient]
...
}
class Patient {
static hasMany = [nurses: Nurse]
...
}
然后Grails将自动创建和更新所需的联接表。然后,您可以使用条件API:查询所有没有患者的护士
def nursesWithoutPatients = Nurse.withCriteria { isEmpty("patients") }