10

我正在使用 JPA(Hibernate 作为我的 JPA 提供程序)。我真的想避免休眠细节并使用 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 方法来初始化实体?

4

1 回答 1

8

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

有一种标准方法可以检查实体是否已初始化(完全加载),这是通过PersistenceUnitUtil(另请参阅如何测试延迟加载的 JPA 集合是否已初始化?

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

在许多情况下,您最好预先指定需要初始化的内容,而不是强制以编程方式初始化(​​未知)实体。我在这里写了一篇关于这个的文章。

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

于 2012-10-07T18:50:17.613 回答