我正在实现一种需要长时间运行的作业的 JobProcessor。这些作业使用的信息基本上Page
是PageField
和PageRelation
,这些信息定义了一个页面树,每个页面都有自己PageField
的 s。
tl;dr 如何轻松地从 Hibernate 复制对象结构以在事务外部使用?
更多详情:
我使用 Hibernate 来持久化这些对象,一切正常。目前,我在手动控制事务的 VM 中运行 JobProcessor:
this.em.getTransaction().begin();
job.start();
this.em.getTransaction().commit();
我有时需要页面上的信息,我可以像这样检索它们:
this.em.getTransaction().begin();
Page page = this.withId(pageId)
this.em.getTransaction().commit();
不知何故,我很幸运从未遇到过 LazyInitialization 异常;我相信是因为 HibernateSession 永远不会关闭。
现在我要转移到 Spring 控制的环境,并尝试使所有事务简短而干净。我需要 的对象树Page
,即长期运行方法中的所有字段、关系和字段。我认为最好的方法是制作树的防御性副本。这怎么能轻松实现?还是有更好的方法来处理这个问题?