Jpa 有时,仍然允许持久性作为一种方式加载数据?

Jpa 有时,仍然允许持久性作为一种方式加载数据?,jpa,ejb,jboss7.x,ejb-3.0,ejb-3.1,Jpa,Ejb,Jboss7.x,Ejb 3.0,Ejb 3.1,我在EJB/JPA书籍中读到: “即使您将该属性标记为@Basic类型的LAZY,持久性提供程序仍然可以急切地加载该属性。这是因为该特性需要类级检测。还应该注意的是,延迟加载既不是真正有用的,也不是重要的性能优化。最好的做法是急切地加载基本属性。” 问题1) 如果我将属性设置为LAZY,为什么仍然允许e持久性提供程序急切地加载该属性?当这种情况发生时?为什么?这仅适用于原语 问题2) @Basic注释是持久属性映射的最简单形式。这是基本属性、基本包装类型的默认映射类型” 如果我使用而不使用原语或

我在EJB/JPA书籍中读到:

“即使您将该属性标记为@Basic类型的LAZY,持久性提供程序仍然可以急切地加载该属性。这是因为该特性需要类级检测。还应该注意的是,延迟加载既不是真正有用的,也不是重要的性能优化。最好的做法是急切地加载基本属性。”

问题1)
如果我将属性设置为LAZY,为什么仍然允许e持久性提供程序急切地加载该属性?当这种情况发生时?为什么?这仅适用于原语

问题2)

@Basic注释是持久属性映射的最简单形式。这是基本属性、基本包装类型的默认映射类型”

如果我使用而不使用原语或包装器(例如,我使用我的类对象),那么持久性提供程序是否仍然允许急切地加载属性

问题3) “您不需要明确地告诉持久性管理器您正在映射一个基本属性,因为它通常可以知道如何使用属性的类型将其映射到JDBC。”

据我所知,当我使用原语或包装器时会发生这种情况,不是吗?它是如何确定如何映射的?有什么明显的规则吗

问题1)如果我将属性设置为惰性,为什么要使用e持久性提供程序 仍然允许急切地加载该属性?发生这种情况时?以及 为什么?这只针对原语吗

由于性能问题:JPA提供程序有权(根据JPA规范)决定最好立即获取字段。这对包装器字段和字符串也是有效的。发生这种情况时没有指定它,这意味着JPA提供程序认为需要时可以这样做

问题2)“@Basic注释是最简单的映射形式 持久属性。这是属性的默认映射类型 哪些是基元,基元包装类型“ 如果使用,则不使用原语或包装器(例如,我使用 类对象),是否仍允许加载持久性提供程序 房地产商们急切地想要什么

实际上,对于关系,你也有相同的规则,尽管几乎总是JPA提供者会考虑你的提示。当然,当你有一个字段类型<代码> YouClass < /C>时,你不允许用@ Basic注释它,并且必须使用@ MyTytoOne注释。你将进一步阅读它们。

问题3)“您不需要告诉您的持久性管理器 明确表示您正在映射一个基本属性,因为它通常可以 了解如何使用属性的类型将其映射到JDBC。”

据我所知,当我使用原语或包装器时会发生这种情况,不要这样做 我?它是如何计算出地图的?有什么明显的规则吗


这将发生在的文档中列出的所有类型,而不仅仅是您列举的类型。规则非常简单:字符串类型映射为VARCHAR/CHAR-like列,数字字段映射为number(或DECIMAL)所以更进一步。

据我所知,我永远不会写属性值-懒惰或急切。每次,JPA都会决定哪种方式更好。如果这是真的,为什么我们有可能告诉JPA如何处理数据(这种可能性是否可用?JPA会自动这样做)正如我所说的,这是一个提示,而不是一个要求。一些JPA实现可能会考虑这个提示。在与其他实体的懒惰关系的情况下,它几乎总是被考虑,这意味着几乎总是关系被提取懒惰。