我在EJB / JPA书中读到了这个:
“即使您将属性标记为@Basic类型的LAZY,仍然允许持久性提供程序急切地加载该属性。这是因为此功能需要类级别的检测。还应该注意延迟加载既不是真正有用也不是重要的性能优化。最好的做法是急切地加载基本属性。“
问题1)
如果我将属性设置为LAZY,为什么仍然允许e持久性提供程序热切地加载属性?当这个情况发生时?为什么?这只是原始人吗?
问题2)
“@Basic注释是持久化属性的最简单映射形式。这是属性的默认映射类型,它们是基元,原始包装类型”
如果我使用不使用原语或包装器(例如我使用我的类对象),他是否仍然允许持久性提供程序急切加载该属性?
问题3) “您不需要明确地告诉您的持久性管理器您正在映射基本属性,因为它通常可以找出如何使用属性的类型将其映射到JDBC。”
据我所知,当我使用原语或包装时会发生这种情况,不是吗?它是如何计算出如何映射的?有没有明显的规则?
答案 0 :(得分:1)
问题1)如果我将属性设置为LAZY,为什么是e持久性提供者 仍然允许热切地加载物业?当这个情况发生时?和 为什么?这只是原始人吗?
由于性能问题:JPA提供商有权(根据JPA规范)决定最好是热切地获取字段。这也适用于包装字段&字符串。发生这种情况时未指定,这意味着当JPA提供商认为需要时可能会发生这种情况。
问题2)“@Basic注释是最简单的映射形式 持久的财产。这是属性的默认映射类型 这是原始的,原始的包装类型“ 如果我使用不使用原始或包装(例如我使用我的 类对象),仍然允许持久性提供程序加载 财产急切地?
实际上是的,对于您拥有相同规则的关系,尽管几乎所有JPA提供商都会考虑您的提示。当然:当你有YouClass
类型的字段时,不允许用@Basic注释它,并且必须使用类似@ ManyToOne的注释。你会进一步阅读它们。
问题3)“你不需要告诉你的持久性管理器 明确表示您正在映射基本属性,因为它通常可以 弄清楚如何使用属性的类型将其映射到JDBC。“
据我所知,当我使用原语或包装时会发生这种情况,不要这样做 一世?它是如何计算出如何映射的?有没有明显的规则?
@Basic annotation的文档中列出了所有类型,而不仅仅是您枚举的那些类型。规则非常简单:字符串类型映射为VARCHAR / CHAR,如列,数字字段,如NUMBER(或DECIMAL),等等。