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

时间:2012-10-07 16:09:00

标签: hibernate jpa initialization

我正在使用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方式来初始化实体?

1 个答案:

答案 0 :(得分:7)

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

有一种标准方法可以检查实体是否已初始化(完全加载),并且是通过PersistenceUnitUtil(另请参阅How to test whether lazy loaded JPA collection is initialized?

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

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

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