hibernate中load()和get()的区别

来源:互联网 发布:淘宝里面高仿手表店铺 编辑:程序博客网 时间:2024/06/05 02:32

程序可以通过load()来加载一个持久化实例,这种加载就是根据持久化类的标识属性值加载持久化实例——其实质就是根据逐渐从数据表中加载一条新记录。

User existUser = session.laod(User.class, pk);
上面代码中的pk就是需要加载的持久化实例的标识属性。

如果没有匹配的数据库记录,load()方法可能抛出HibernateException;如果在持久化注解中指定了延迟加载,则load()方法会返回一个未初始化的代理对象(可以理解为持久化对象的替身),这个代理对象并没有加载数据记录,直到程序调用该代理对象的某方法时,Hibernate才会去访问数据库。

如果希望在某对象中创建一个指向另一个对象的关联,又不想从数据库中装载该对象的同时立即装载所关联的全部对象,延迟加载方式就非常有用了。

与load()方法类似的是get()方法,get()方法也用于根据主键加载持久化实例,但get()方法会立刻访问数据库,如果没有对应的记录,get()方法返回null,而不是返回一个代理对象。

load()方法和get()方法主要区别在于是否延迟加载。