【问题标题】:Grails - unsaved transient instance exceptionGrails - 未保存的瞬态实例异常
【发布时间】:2011-06-20 19:33:07
【问题描述】:

我正在尝试将 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 grails


    【解决方案1】:
    1. findBy* 触发flush() - 每个Criteria 都会刷新可能由该Criteria 返回的任何对象。 这样做是为了确保Criteria 返回所有匹配的对象。 看起来这个逻辑是在 1.1 中引入的。

    2. 尝试获取Affiliation.withNewSession{ } 中的对象。或者,更好的是,在开始当前事务之前/在事务开始时,在 flush()ed 对象变脏之前获取它。

    3. 启用 Grails sql 日志记录:How to log sql in grails 1.3.7

    【讨论】:

    • 感谢您的意见。我真的不知道你的第一点和第二点是什么意思 - 我对此很陌生。因此,当我传入缓存的 Affiliation 对象时,它会刷新它,这实际上调用了保存?你能详细说明你的观点吗?非常感谢您的帮助。
    • 1.它不是缓存实体,而是导致flush() 的缓存初始化(您的Affiliation.findByKey())。 flush() 是,是的,就像 save(),将更改写入数据库。只是它没有被提交 - 如果你 discard() 它或者实际上没有 save() 任何东西,它将自动回滚。 (我可能在这里对 Hibernate 内部结构有误,但这是我的想法)
    • 2.为了不 flush() 您当前的 Hibernate 会话 (coderanch.com/t/218534/ORM/java/…),您可以在不同的 Session 中运行代码 - 这就是 .withNewSession{ } 所做的。但是,您将无法保存/连接来自不同会话的对象,直到您将其attach() (grails.org/doc/latest/ref/Domain%20Classes/attach.html) 连接到当前会话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多