当前位置: 首页 > 知识库问答 >
问题:

什么时候需要Hibernate运行时代理生成?

吴胜
2023-03-14

hibernate文档中说:“如果您希望利用运行时代理生成,那么至少应该使用包可见性来定义构造函数。”。我在hibernate文档中读到,hibernate可以增强字节码而不是代理创建(hibernate 5.x)。在任何情况下,它都可以用这种新方法代替代理创建?在哪些情况下需要生成运行时代理?

共有1个答案

胡飞舟
2023-03-14

默认情况下,运行时增强功能用于延迟加载支持。如果要在@OneToOne@ManyToOne关联上使用延迟加载,则将延迟加载的类应具有受保护的构造函数,否则Hibernate将在尝试获取父实体时引发异常。例如:

@Entity
public class Parent {

    @OneToOne(fetch=FetchType.LAZY)
    private Child child;

}

在本例中,子类必须具有受保护或更高可见性的构造函数。

使用Hibernate 5.0,您可以进行字节码增强。这是一个额外的编译步骤,所以您需要将其放在Maven或Ant(或任何其他)构建过程中。通过字节码增强,您不需要使用arg构造函数,但如果不包含它,您的应用程序将不会遵守JPA规范(只有在您计划切换到Hibernate以外的提供商时才重要)。

 类似资料:
  • 问题内容: 我对JAX-WS进行了概述,并注意到了(和)的一些引用。 在什么情况下需要?(我认为JSR 109服务器?!) 问题答案: 是使用SUN的参考实现将Web服务作为标准存档部署在非Java EE5 Servlet容器上时所需的专有部署描述符。 Sun的RI 用作servlet上下文事件的侦听器和调度程序servlet。两者都必须在中声明。然后需要该文件为定义Web服务端点,以使其知道必须

  • 问题内容: 我使用类只有很短的时间,编写方法时,我使所有变量都引用了self,例如self.foo。 但是,我在浏览《 wxPython in Action》 一书时发现,“ self”并没有一直使用。例如: 下面的一个确实使用“自我”。 如果我没记错的话,“自我”是指该类的特定实例,那么什么时候没有必要?有一般的经验法则吗? 问题答案: 您用于引用当前实例的属性。 您用于引用父类的方法。 如果仅

  • 谷歌正在通过电子邮件通知Android位置权限的更改: 我们将于2016年10月15日进行更改,这将影响针对API版本21(Android 5.0、Lollipop)或更高版本的应用程序,这些应用程序使用ACCESS_FINE_LOCATION但没有明确具有“android.hardware.location.gps”用途功能。展望未来,这些应用程序将可安装在没有GPS硬件的设备上。在大多数情况下

  • 我有一个Android应用程序,每个屏幕分辨率包含大约150个图标。 如果我把所有图标放在所有5个主要分辨率(ldpi、mdpi、hdpi、xhdpi、xxhdpi)中,那么图标总数将达到750个。这有几个缺点: 大APK大小 将dexGuard与ant构建脚本一起使用时构建过程缓慢。它对图像进行一些处理需要一些时间。 或者,我可以只在一些分辨率中放置图标。例如,ldpi设备现在仅占市场的10%,

  • 在回答“亚马逊DynamoDB吞吐量是如何计算和限制的?”有人建议,只要超出每秒预配的吞吐量,DynamoDB就会限制请求。然而,这与我的经验相矛盾。 我在一个表中发布了多行,通常行数远远超过了配置的写容量。这种情况会在短时间内发生。在某一点上,我甚至有5分钟的平均时间超过了规定的容量。OTOH,平均15分钟低于容量。在那段时间里,我没有收到任何限制性的请求。 15分钟的平均峰值远低于规定的容量: