一尘不染

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

hibernate

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


阅读 373

收藏
2020-06-20

共1个答案

一尘不染

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

有一种标准的方法可以检查是否已初始化(完全加载)实体,这是通过PersistenceUnitUtil进行的

只要实体仍处于连接状态,就可以访问其属性以强制初始化。这不是很整洁,但确实可以扩展。不利的一面是,取决于属性的确切性质(例如,包含许多元素的集合),您可能会向数据库触发数十至数百甚至数千个查询。

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

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

2020-06-20