hibernate的session.get/load方法的比较

public static void main(String[] args) {
		User user = new User();
		user.setName("test3");
		user.setBirthday(new Date());
		try {
			addObject(user);
			User user1 = getUser(user.getId());
			System.out.println("user1" + user1.getClass().getName());
			System.out.println(user.getId());
			System.out.println(user1.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	static User getUser(int userId) throws Exception {
		Session session = null;
		User user = null;
		try {
			session = HibernateUtil.getSession();
			user = (User) session.get(User.class, userId);
			//user = (User) session.load(User.class, userId);
			return user;
		} catch (HibernateException e) {
			e.printStackTrace();
			throw e;
		}finally{
			session.close();
		}
	}

打印结果:

Hibernate: insert into USERS (USER_NAME, BIRTHDAY) values (?, ?)
Hibernate: select user0_.USER_ID as USER1_0_0_, user0_.USER_NAME as USER2_0_0_, user0_.BIRTHDAY as BIRTHDAY0_0_ from USERS user0_ where user0_.USER_ID=?
user1blog.hibernate.domain.User
14
User [birthday=2012-08-14 10:53:50.0, id=14, name=test3]


使用load方法打印的结果:

Hibernate: insert into USERS (USER_NAME, BIRTHDAY) values (?, ?)
user1blog.hibernate.domain.User_$$_javassist_0
15
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:132)
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:174)
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
    at blog.hibernate.domain.User_$$_javassist_0.toString(User_$$_javassist_0.java)
    at blog.hibernate.Base.main(Base.java:25)


session.load(User.class, userId);的理解:



load方法具有懒加载的作用,只会在第一次用到时才会去查询。所以当session关闭后,才第一次用到的话就没法查询了 ,于是就报错了。而get方法没有懒加载的作用。


而且load方法返回的对象永远也不会为Null.


hibernate要求进行映射的类不能是final类型的,因为final类型的类是不能被继承的。这个可以从load方法体会,因为load方法返回的对象实际上是从load(Class clazz,Serializable id)方法的参数Class这个类继承来在实例化的,要是final的话就无法继承了。


转载于:https://www.cnblogs.com/xzf007/archive/2012/08/14/2873850.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值