初始化惰性实体的标准 JPA 方法

2024-03-08

我正在使用 JPA(Hibernate 作为我的 JPA 提供程序)。我真的想避免 hibernate 细节并使用 JPA 规范。我有一个初始化惰性实体的函数。不幸的是,它使用 Hibernate 特定的功能。这是我的功能:

private T initializeAndUnproxy(T entity) {
        if (entity == null) {
            throw new 
               NullPointerException("Entity passed for initialization is null");
        }

        Hibernate.initialize(entity);
        if (entity instanceof HibernateProxy) {
            entity = (T) ((HibernateProxy) entity).getHibernateLazyInitializer().getImplementation();
        }
        return entity;
    }

有没有纯JPA的方式来初始化实体?


似乎没有初始化实体的标准方法。

有一种标准方法可以检查实体是否已初始化(完全加载),那就是通过持久化单元实用程序 http://docs.oracle.com/javaee/6/api/javax/persistence/PersistenceUnitUtil.html(另见如何测试延迟加载的JPA集合是否已初始化? https://stackoverflow.com/questions/4306463/how-to-test-whether-lazy-loaded-jpa-collection-is-initialized)

只要实体仍处于附加状态,您就可以访问其属性以强制初始化。这不是很简洁,但在某种程度上确实有效。缺点是,根据属性的确切性质(例如包含许多元素的集合),您可能会向数据库发出数十、数百甚至数千个查询。

在许多情况下,您最好预先指定需要初始化的内容,而不是以编程方式强制初始化(未知)实体。我写了一篇关于这个的文章here http://jdevelopment.nl/fetching-arbitrary-object-graphs-jpa-2.

但是,如果您确实需要通过一次调用某个标准框架方法来完全初始化实体,那么不幸的是,似乎没有办法,您现在必须坚持使用 Hibernate 特定代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初始化惰性实体的标准 JPA 方法 的相关文章

随机推荐