【问题标题】:Standard JPA method to initialize lazy entity用于初始化惰性实体的标准 JPA 方法
【发布时间】:2012-09-28 00:55:03
【问题描述】:

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

【问题讨论】:

    标签: hibernate jpa initialization


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-24
    • 2014-05-28
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2012-06-17
    • 2015-11-29
    • 2012-05-06
    相关资源
    最近更新 更多