有时仍然允许持久性加载数据作为热切的?

时间:2013-12-06 15:26:21

标签: jpa ejb jboss7.x ejb-3.0 ejb-3.1

我在EJB / JPA书中读到了这个:

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

问题1)
如果我将属性设置为LAZY,为什么仍然允许e持久性提供程序热切地加载属性?当这个情况发生时?为什么?这只是原始人吗?

问题2)

“@Basic注释是持久化属性的最简单映射形式。这是属性的默认映射类型,它们是基元,原始包装类型”

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

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

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

1 个答案:

答案 0 :(得分:1)

  

问题1)如果我将属性设置为LAZY,为什么是e持久性提供者   仍然允许热切地加载物业?当这个情况发生时?和   为什么?这只是原始人吗?

由于性能问题:JPA提供商有权(根据JPA规范)决定最好是热切地获取字段。这也适用于包装字段&字符串。发生这种情况时未指定,这意味着当JPA提供商认为需要时可能会发生这种情况。

  

问题2)“@Basic注释是最简单的映射形式   持久的财产。这是属性的默认映射类型   这是原始的,原始的包装类型“   如果我使用不使用原始或包装(例如我使用我的   类对象),仍然允许持久性提供程序加载   财产急切地?

实际上是的,对于您拥有相同规则的关系,尽管几乎所有JPA提供商都会考虑您的提示。当然:当你有YouClass类型的字段时,不允许用@Basic注释它,并且必须使用类似@ ManyToOne的注释。你会进一步阅读它们。

  

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

     

据我所知,当我使用原语或包装时会发生这种情况,不要这样做   一世?它是如何计算出如何映射的?有没有明显的规则?

@Basic annotation的文档中列出了所有类型,而不仅仅是您枚举的那些类型。规则非常简单:字符串类型映射为VARCHAR / CHAR,如列,数字字段,如NUMBER(或DECIMAL),等等。