Igo*_*hin 5 java orm jpa eclipselink jpql
假设我们有一个实体
@Entity
public class Person {
@Id int id;
@Basic String name;
@Basic String remark;
}
Run Code Online (Sandbox Code Playgroud)
让我们说"评论"字段填充大文本,但很少使用.因此,当你运行jpql:时SELECT p FROM Person p,EclipseLink只会执行sqlselect id, name from person
而且当你打电话时person.getRemark(),它会被取出select remark from person where id = ?.
是否可以使用EclipseLink 2.1?
您确实可以在一个fetch属性中定义一个属性Basic注释中并将其设置为LAZY. 但是让我引用规范中的内容:
11.1.6 基本注解
(……)
该
EAGER策略是对持久性提供程序运行时的一项要求,即必须急切地获取数据。 该LAZY策略是对持久性提供程序运行时的一个提示,即在第一次访问数据时应该延迟获取数据。允许实现急切地获取LAZY已为其指定策略提示的数据。特别是,延迟获取可能仅适用于Basic使用基于属性的访问的映射。
在 EclipseLink 的特殊情况下,行为将取决于上下文(Java EE 与 Java SE),如您可能需要了解的关于 EclipseLink JPA 延迟加载中所述。
在 Java EE 环境中(假设容器实现了 EJB 3.0 规范的适当容器契约):
当 fetch 属性设置为 javax.persistence.FetchType.LAZY 时,EclipseLink JPA 执行延迟加载。
在 Java SE 环境中:
默认情况下,EclipseLink JPA 会忽略 fetch 属性并应用默认的 javax.persistence.FetchType.EAGER。
要将 EclipseLink JPA 配置为在 fetch 属性设置为 FetchType.LAZY 时执行延迟加载,请考虑以下情况之一:
尝试添加注释@Basic(fetch = FetchType.LAZY)
@Entity
public class Person {
@Id int id;
@Basic String name;
@Basic(fetch = FetchType.LAZY) String remark;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4671 次 |
| 最近记录: |