Я пытаюсь обновить приложение Grails с 1.0.3 до 1.3.7 и столкнулся с исключением:
object references an unsaved transient instance - save the transient instance before flushing:
Я не делаю никаких спасений в коде, который срабатывает. Это в следующем коде
public static Season getCurrentSeason() {
String yearString = ConfigurationHolder.config.year
assert yearString != null: "need to configure season"
int year = Integer.parseInt(yearString)
Affiliation nfl = Affiliation.nfl;
return Season.findBySeasonKeyAndLeague(year, nfl)
}
Звонок на Affiliation.nfl:
public static Affiliation getNfl() {
if (cacheNFL == null) {
String key = ConfigurationHolder.config.nfl
cacheNFL = Affiliation.findByKey(key)
}
return cacheNFL;
}
Если я удалил cacheNFL и каждый раз делал реальную выборку, код работал. Мои вопросы:
- Почему это работало раньше? Похоже на то
как сделать выборку с кэшированным
объект, который не является частью текущего
Hibernate запрос (который я, возможно,
неправильно, если есть проблема)
никогда не будет поддержан.
- Есть ли
в любом случае вокруг этой проблемы, кроме
сделать выборку в базу данных?
- Как
могу ли я сказать, если я бью
базы данных или собирается в спящий режим
кеш (я не знаю много о
Hibernate). Есть ли выход, который может
покажи мне?