我是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 中的代码是正确的,或者是否可以从另一个类更改属性的值,我就不会这样做。请帮帮我..谢谢!!
答案 0 :(得分:1)
更改不同类中的域类的属性很好。
但是,您并不需要NursePatient
课程。如果你宣布护士和患者之间的关系是多对多的,就像这样:
class Nurse {
static hasMany = [patients: Patient]
...
}
class Patient {
static hasMany = [nurses: Nurse]
...
}
然后Grails将自动创建和更新所需的连接表。然后,您可以使用Criteria API查询所有没有患者的护士:
def nursesWithoutPatients = Nurse.withCriteria { isEmpty("patients") }