Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 初始化惰性实体的标准JPA方法_Hibernate_Jpa_Initialization - Fatal编程技术网

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

Hibernate 初始化惰性实体的标准JPA方法,hibernate,jpa,initialization,Hibernate,Jpa,Initialization,我正在使用JPA(Hibernate作为我的JPA提供者)。我真的试图避免hibernate的细节,并使用JPA规范。我有一个初始化惰性实体的函数。不幸的是,它使用了特定于Hibernate的函数。这是我的职责: private T initializeAndUnproxy(T entity) { if (entity == null) { throw new NullPointerException("Entity pas

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

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

有一种检查实体是否已初始化(完全加载)的标准方法,即通过(另请参阅)

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

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


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

关于最后一句话:我从未使用过它,但是使用Entitygraphs来获取完整实体()如何?难道不可能获取实体的实体图并将其元模型的所有惰性属性添加为AttributeNodes(然后获取它)吗?