【发布时间】:2016-01-19 13:51:13
【问题描述】:
有时在 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 设置为仅将此持久数据包含在此服务内的查询中?
【问题讨论】: