取消代理休眠对象的优雅方式



我正在使用Jax-RS和GSON创建一个Web服务。现在,GSON无法转换HibernateProxy对象,我有一些问题。我有一个 API,以便我可以急切加载和延迟加载。当我想急切加载时,我使用Hibernate.initialize(...)。然而,这似乎并不能保证一个对象是无代理的?

那么,您将在何处、何时以及如何取消代理对象?当对象也可能与其他也需要取消代理的对象相关时,您如何处理这个问题?

下面是一个示例代码:

public <P> List<P> unproxy(Collection<P> objects) {
    Session session = sessionFactory.getCurrentSession();
    List<P> result = new ArrayList<P>();
    for (P t : objects) {
        Object unproxied = ((SessionImplementor)session).getPersistenceContext().unproxy(t);
        result.add((P) unproxied);
    }
    return result;
}

最新更新