Hibernate Session中get()跟load()方法的区别
Hibernate Session中get()和load()方法的区别
具体示例见如下代码:
package com.oracle.entities; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; /** * @author Wentasy * */ public class HBTest { private static SessionFactory sf = null; private static Session session = null; @BeforeClass public static void before(){ //加载配置文档,读取相关配置,创建连接工厂 sf = new Configuration().configure().buildSessionFactory(); //从工厂获得一个连接 session = sf.openSession(); //开启一个事务 session.beginTransaction(); } @Test public void testGet(){ User user = new User(); user = (User)session.get(User.class, 4); System.out.println(user.getName()); } @Test public void testLoad(){ User user = new User(); user = (User)session.load(User.class, 4); System.out.println(user.getName()); } @AfterClass public static void after(){ //提交一个事务 session.getTransaction().commit(); //关闭连接 session.close(); } }
首先testGet和testLoad方法均不输出属性,观察输出结果:
testGet方法:
testLoad方法:
然后testGet和testLoad方法均输出User的Name属性,再次观察输出结果:
testGet方法:
testLoad方法:
总结:
1. get 方法无论是否获得对象属性都会输出SQL语句;
2. load 方法产生代理对象,不输出SQL语句,只有当获得对象的某个属性时才会生成SQL语句。