当前位置: 首页 > 面试题库 >

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

姬正文
2023-03-14
问题内容

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


问题答案:

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

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

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

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

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



 类似资料:
  • 我正在开发一个Struts2 Spring Hibernate webapp,我需要在检索一个对象或该对象的集合后初始化一个惰性集合。 用例 我有一个团队模型,其关系被热切地加载为员工(我认为这显然是一个集合)。反过来,员工模型有一个懒惰的关系注册表,我只需要一些特定的操作,所以我根本不需要急切地加载它。 现在。我调用我的(用Spring注入到我的Struts2控制器中),以便检索一个特定的已经加

  • 问题内容: 在我的JavaFX应用程序中,当我对EmbeddedId类使用 Non Lazy Collection 选项时,为了保持双向关系,它将产生以下异常。经过几个小时的工作后,我仍然无法解决它。实体类如下。谢谢。 EmbeddedId类 WorkflowStep实体 (带有EmbeddedId) WfScriptTemplate实体 (带有双向关系) PostgreSQL异常 MySQL异常

  • 问题内容: 您将如何在Swift中实现以下模式? 所述类被初始化,其中包含的词典JSON数组。这些字典用于初始化类。但是,当访问或属性时,对象的初始化会延迟进行。 问题答案: 看来这个问题已经得到了很大的回答,但是回过头来看原始帖子,这是(IMHO)Swift中相对简洁的翻译。关键是您可以链接惰性属性。请注意,我同时使用了类函数和闭包- 两者都很好。

  • 延迟初始化 是一种允许我们延迟初始化消耗资源比较大的进程,直到需要他们的时候(才初始化)。这其中的一个例子就是jQuery的.ready()方法,它在DOM节点加载完毕之后会执行一个回调方法。 $( document ).ready( function () { //ajax请求不会执行,直到DOM加载完成 var jqxhr = $.ajax({ url: "ht

  • 问题内容: 创建单例的模式似乎是这样的: 但是我的问题是,如果Singleton构造函数执行的不是单元测试友好的操作,例如如何调用外部服务,jndi查找等,您如何使用这样的类进行单元化? 我想我可以像这样重构它: 现在的问题是,仅出于单元可测试性,我已强制将getInstance同步,因此仅出于测试方面,它将对实际应用程序产生负面影响。有没有解决的办法,由于Java中双重锁定模式的破坏性,似乎其他

  • 我在想Spring中bean的懒惰初始化。对我来说,这里的“懒惰”是否意味着当一个bean被引用时会被创建并不十分清楚。 我认为Spring中的延迟初始化支持是不同的。我认为这是一个基于“方法调用”的惰性创建。我的意思是,每当对该方法调用任何方法时,都会创建该方法。 我认为这可以通过创建特定bean的代理实例并对任何方法调用进行初始化来轻松解决。 我是否遗漏了一些东西?为什么没有实施?这个概念有什