【问题标题】:can i change the value of a property from another domain class? - grails我可以从另一个域类更改属性的值吗? - 圣杯
【发布时间】:2012-01-12 03:36:33
【问题描述】:

我是 grails 的新手。我现在在我的域类中遇到问题。我有 3 个域类,Patient 类,Nurse 类和 NursePatient 类,NursePatient 类是复合键您可以在其中看到谁是 Patient 的主治护士,因此如果您查看其表格,您只能看到护士和患者的 id。这是我的 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

    }


}

}

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

【问题讨论】:

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


    【解决方案1】:

    在不同的类中改变域类的属性是可以的。

    但是,您实际上并不需要 NursePatient 类。如果您将 Nurses 和 Patient 之间的关系声明为多对多,如下所示:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多