При сохранении экземпляра Trip в Grails я получаю следующее исключение:
2011-01-26 22: 37: 42,801 [http-8090-5]
ОШИБКА ошибок.GrailsExceptionResolver
- объект ссылается на несохраненный временный экземпляр - сохраните
переходный процесс перед промывкой: Гребец
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 хочет это сохранить? почему это временный экземпляр?