Иногда в Grails службе мне нужно обрабатывать много сделки между двумя до трех таблиц:Включите unpersisted данные Hibernate на Grails домен запросов
class MyService {
void saveOwner(Map params) {
...
params.get("schedules").each { saveSchedule(it) }
}
void saveSchedule(Owner owner, Map schedule) {
Schedule s
if(schedule.get("id") != null) {
s = Schedule.createCriteria().get {
eq("owner", owner)
eq("schedule", schedule.get("seqNo"))
}
}
if(s == null) {
s = new Schedule()
schedule.put("seqNo", generateSeqNo(owner))
}
s.setProperties(schedule)
s.save(faileOnError: true)
}
Long generateSeqNo(Owner owner) {
Long seqNo = Schedule.createCriteria().get {
projections {
max("seqNo")
}
eq("owner", owner)
}
if(seqNo == null) { seqNo = 0 }
return ++seqNo
}
}
Теперь в методе generateSeqNo()
всегда возвращает один и тот же порядковый номер. Похоже, что Hibernate не включает экземпляры домена по умолчанию, которые еще не сброшены в базу данных. Как я могу установить Grails для включения этих сохраняемых данных только в запросы внутри этой службы?