Hibernate的数据的加载
来源:互联网 发布:java开发周末兼职 编辑:程序博客网 时间:2024/05/10 21:27
1.Hibernate3的所有实体和集合的默认的获取的策略都是惰性加载的。
这就是说,hibernate加载一个对象除非你需要查询到到它。我这里假定实体类名是Event ,有两个属性id,name。
我们程序里有这么一句:表示通过主键得到一个Employee对象
Event emp=(Event)session.load(Event.class,new Long(1001));
注意,这个时候数据库里什么都没有加载进内存的。这是因为hibernate使用了代理对象。当hibernate得到一个实体类的一个实例时,它先查看一下是否得到这个类的代理对象而不用查询数据库。
Event emp=(Event)session.load(Event.class,new Long(1001));
emp.getId();
emp.getName();
只有当上面程序的第三句执行的,这个时候代理对象得到初始化,开始真正从数据库读出数据加载到内存中。
这个代理对象是非常有用的,比如我们需要仅仅得到对象的引用时。
请注意;如果使用的是session里的get()方法,这个总是要查询数据库的(如果没有内存中没有的话)。
在JPA里,和hibenate里load()和get()对应的是EntityManager的getReference和find()方法.
现在假定与Event存在*-to-one关联的对象,在加载Event对象的时候,也并不会加载的.A proxy is initialized if you call any method that is not the identifier getter method, a collection is initialized if you start iterating through its elements or if you call any of the collection-management operations, such as size() and contains().
2.禁止使用代理对象,也就是说不延迟加载数据.
简单的设置lazy="false"即可.
例如:
<class name="Event"
table="Events"
lazy="false">
...
</class>
JPA的方式这么写:
@Entity
@Table(name = "Events")
@org.hibernate.annotations.Proxy(lazy = false)
public class Event { ... }
现在:
Event event = (Event) session.load(Event.class, new Long(1001));
Event event = em.getReference(Event.class, new Long(1001));
都是直接从数据库查询返回数据了.注意,这个时候相关联的实体也会加载的.
- Hibernate的数据加载
- Hibernate的数据的加载
- hibernate数据加载get/load的区别
- hibernate数据加载get/load的区别
- Hibernate加载数据的两种方式
- Hibernate加载数据时get和load方法的区别
- Hibernate加载数据时get和load方法的区别
- Hibernate两种加载数据的方式get()和load()
- 关于使用JSON对hibernate数据延迟加载的问题
- hibernate加载数据load 和 get 的区别
- 使用DataTable和hibernate加载数据的几个问题
- hibernate的延迟加载和关联数据抓取方式
- Hibernate的加载方式
- hibernate的延迟加载
- Hibernate的延迟加载
- hibernate 的延迟加载
- hibernate的懒加载
- hibernate的延迟加载
- 疯狂的程序员34
- TeeChart在VC中实时曲线绘制的应用
- 随笔
- 数学缺口
- 微软提供5G的网络硬盘
- Hibernate的数据的加载
- 《逻辑与演绎科学方法论导论》学习笔记
- 火箭队17连胜了吗
- 网游三国城市攻略
- iPhone Multi-Touch 技术
- 星期六的一上午课
- QTP访问DOM的方法
- Java远程通讯可选技术及原理
- XML Serialization Using C#...