удаление с помощью executeUpdate () - grails - PullRequest
1 голос
/ 18 января 2012

У меня проблема сейчас, у меня есть 2 класса домена, а именно Доктор и Пациент , где они имеют отношение 1: m.вот мой код для класса Доктор

class Doctor {

String name
String specialization

def doctorService

static hasMany = [patients: Patient]
static belongsTo = [hospital: Hospital]


static constraints = {

    name(blank:false)
    specialization(blank:false)
    patients(nullable:true)
    hospital(nullable:false)
}

String toString(){

    "Doctor ${name} "

}

}

-> и вот мой код для класса Пациент :

class Patient {

String name
String ailment
int age
Date dateAdmit, dateDischarge

static belongsTo = [doctor: Doctor, hospital: Hospital]

static constraints = {

    name(blank:false, maxSize:100)
    ailment(blank:false)
    age(size:1..200)
    dateAdmit(nullable:true)
    dateDischarge(nullable:true)
    hospital(nullable:false)
    doctor(nullable:false, validator:{val, obj -> val.hospital == obj.hospital})

}

String toString(){

    "${name} "

}
}

->Я хотел удалить доктора , у которого нет пациента , используя executeUpdate () .Я могу выбрать врачей без пациентов , используя такие динамические искатели.

_

def d = Doctor.findAll("from Doctor as d where not exists" +
    "(from Patient as p where p.doctor = d)")

_

похожеэтот синтаксис не работает в executeUpdate () , я просто новичок в Grails.пожалуйста, помогите мне .. спасибо ...

Ответы [ 3 ]

10 голосов
/ 18 января 2012

Используйте это:

Doctor.executeUpdate('delete from Doctor d where d.patients is empty')
0 голосов
/ 18 января 2012

Вы также можете сделать:

def d = Doctor.findAll("from Doctor as d where not exists" + "(from Patient as p where p.doctor = d)")*.delete()
0 голосов
/ 18 января 2012

Вы пытались использовать Hibernate Criteria Builder ? Гораздо гибче и удобнее в обслуживании, чем executeUpdate()

 Doctor.withCriteria{
   isEmpty patients
 }.each{it.delete()}

ВНИМАНИЕ: этот код не проверен. Не использовать в производстве без тестирования :-D

Но это идея

...