【发布时间】:2011-01-26 22:04:34
【问题描述】:
在 Grails 中保存 Trip 实例时出现以下异常:
2011-01-26 22:37:42,801 [http-8090-5] 错误错误。GrailsExceptionResolver - 对象引用了一个未保存的瞬态实例 - 保存 刷新前的瞬态实例:Rower org.hibernate.TransientObjectException: 对象引用了一个未保存的瞬态 instance - 保存瞬态实例 冲水前:赛艇
这个概念很简单:乘船旅行需要一些划船者、一名舵手(也是一名划船者)和一艘船:
行程看起来像(缩短):
class Trip {
Boat boat;
Rower coxwain;
static belongsTo = [Rower,Boat]
static hasMany = [rowers:Rower]
}
和划船者(缩短)
class Rower {
String firstname;
String name;
Rower reference;
static hasMany = [trips:Trip];
static mappedBy = [trips:"rowers"]
}
然后将行程保存在控制器中,例如:
def save = {
def trip = new Trip(params)
// adding Rowers to Trip
if (params.rower instanceof String) {
def r = Rower.get(params?.rower)
if (r != null) {
trip.addToRowers(r)
}
} else {
params?.rower?.each{
rowerid ->
def r = Rower.get(rowerid)
log.info("rowerid (asList): " + rowerid)
if (r != null) {
trip.addToRowers(r)
}
}
}
// saving the new Trip -> EXCEPTION IN NEXT LINE
if(!trip.hasErrors() && trip.save(flush:true)) {
// ...
}
// ...
}
我认为我已经正确设置了域之间的关系。 划船者在添加到行程时不会更改。为什么 Grails 要保存它?为什么是瞬态实例?
【问题讨论】:
-
这是否发生在两个控制器块中(即 if 和 else)?
-
您收到任何日志消息了吗?
标签: grails grails-orm