重新附加反序列化的hibernate代理

时间:2016-09-22 12:33:06

标签: java hibernate session serialization concurrency

我使用HQL从hibernate检索了一个数据库代理对象empP(domain class:Employee)。现在我想将它(步骤1)序列化为某个文件然后反序列化(步骤2)。 Step1和Step2分为2个不同的线程。

顺序问题:

  1. 我在第1步中序列化了empP。
  2. 在第1步中未按empP序列化((ProxyObject)empP).getHandler().session的附加会话,sessiontransient
  3. 在另一个主题中,我将empP反序列化为empPDeserialized,现在有empP但empP.getHandler().getSession()等于null。这是第二步,有不同的会话。
  4. 现在,每当我从getter致电empPDeserialized时,就会抛出could not initialize proxy - no Session

    在第2步中,我希望empPDeserialized附加到当前会话,以便getter调用成功。

    现在,我能想到的一个愚蠢的方法是:

        ((org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer)((javassist.util.proxy.ProxyObject)empPDeserialized).getHandler())
    .setSession((org.hibernate.engine.spi.SessionImplementor)sessionFactory.getCurrentSession());
    

    问题是,我想知道最好的做法,并在步骤2中使用最少的SQL调用。提前谢谢。

0 个答案:

没有答案