关于hibernate的load()方法的相关实验
2012-04-15 10:32
344 查看
定义一个Person类:
基本配置:
主键:id
属性:name、age
Person.hbm.xml中主键配置:<id name="id" />
使用时:
Person p = new Person();
p.setId(2);
Transaction ts = session.beginTransaction();
Person t = (Person)session.load(Person.class,2);
ts.commit();
System.out.println(t.getId());
System.out.println(t);
session.close();
结果:一切正常显示:id:2,并显示代理对象
改一:
使用时:
Person p = new Person();
p.setId(2);
Transaction ts = session.beginTransaction();
Person t = (Person)session.load(Person.class,2);
ts.commit();
System.out.println(t);
session.close();
System.out.println(t.getId());
结果:一切显示和上面的基本配置一样,这里t.getId()并不从数据库中查询(因为没有看到查询语句显示),本人尝试着将id单独提取并更换为一个拥有两个属性的主键对象后,并在load方法之前为之赋值,则t也可以得到这两个属性。
改二:
使用时:
Person p = new Person();
p.setId(2);
Transaction ts = session.beginTransaction();
Person t = (Person)session.load(Person.class,2);
ts.commit();
session.close();
System.out.println(t.getId());
System.out.println(t);
结果:出现错误了,但是id可以正常显示
原因:在session中找不到对应的t
观察一二改法本人总结:load(class,args)方法,通过对load方法的参数解析 生成对应class类的子类(并返回这个子类对象作为代理对象,并存储到session中),并通过第二个参数args为代理对象附上主键属性,然后在你需要使用这个代理对象的时候(除开主键属性查询),他会通过它的主键属性在数据库中查询,并存放session中,然后在session中通过主键属性查找相应的对象属性及方法。
改三:
使用时:
Person p = new Person();
p.setId(2);
Transaction ts = session.beginTransaction();
Person t = (Person)session.load(Person.class,p);
ts.commit();
System.out.println(t.getId());
System.out.println(t);
session.close();
结果:直接报错
改四:
Person.hbm.xml中主键配置:
<composite-id>
<key-property name="id"></key-property>
</composite-id>
使用时:
Person p = new Person();
p.setId(2);
Transaction ts = session.beginTransaction();
Person t = (Person)session.load(Person.class,p);
ts.commit();
System.out.println(t.getId());
System.out.println(t);
session.close();
结果:又可以正常显示了
以上实现都是在基本配置上修改,使用hibernate4.1.2和mysql5.0及mysql5.1.2驱动包实现上
基本配置:
主键:id
属性:name、age
Person.hbm.xml中主键配置:<id name="id" />
使用时:
Person p = new Person();
p.setId(2);
Transaction ts = session.beginTransaction();
Person t = (Person)session.load(Person.class,2);
ts.commit();
System.out.println(t.getId());
System.out.println(t);
session.close();
结果:一切正常显示:id:2,并显示代理对象
改一:
使用时:
Person p = new Person();
p.setId(2);
Transaction ts = session.beginTransaction();
Person t = (Person)session.load(Person.class,2);
ts.commit();
System.out.println(t);
session.close();
System.out.println(t.getId());
结果:一切显示和上面的基本配置一样,这里t.getId()并不从数据库中查询(因为没有看到查询语句显示),本人尝试着将id单独提取并更换为一个拥有两个属性的主键对象后,并在load方法之前为之赋值,则t也可以得到这两个属性。
改二:
使用时:
Person p = new Person();
p.setId(2);
Transaction ts = session.beginTransaction();
Person t = (Person)session.load(Person.class,2);
ts.commit();
session.close();
System.out.println(t.getId());
System.out.println(t);
结果:出现错误了,但是id可以正常显示
原因:在session中找不到对应的t
观察一二改法本人总结:load(class,args)方法,通过对load方法的参数解析 生成对应class类的子类(并返回这个子类对象作为代理对象,并存储到session中),并通过第二个参数args为代理对象附上主键属性,然后在你需要使用这个代理对象的时候(除开主键属性查询),他会通过它的主键属性在数据库中查询,并存放session中,然后在session中通过主键属性查找相应的对象属性及方法。
改三:
使用时:
Person p = new Person();
p.setId(2);
Transaction ts = session.beginTransaction();
Person t = (Person)session.load(Person.class,p);
ts.commit();
System.out.println(t.getId());
System.out.println(t);
session.close();
结果:直接报错
改四:
Person.hbm.xml中主键配置:
<composite-id>
<key-property name="id"></key-property>
</composite-id>
使用时:
Person p = new Person();
p.setId(2);
Transaction ts = session.beginTransaction();
Person t = (Person)session.load(Person.class,p);
ts.commit();
System.out.println(t.getId());
System.out.println(t);
session.close();
结果:又可以正常显示了
以上实现都是在基本配置上修改,使用hibernate4.1.2和mysql5.0及mysql5.1.2驱动包实现上
相关文章推荐
- hibernate笔记: 关于懒加载和load()方法之三
- 关于hibernate查找方法get/load区别
- hibernate笔记(六)关于懒加载和load()方法之三————误区
- hibernate笔记: 关于懒加载和load()方法
- hibernate笔记(四)关于懒加载和load()方法之一
- 关于Hibernate在使用load方法时需要主要的
- Hibernate中get()与load()的区别,以及关于ThreadLocal的使用方法
- hibernate笔记:关于懒加载和load()方法之二
- Hibernate中关于get()和load()方法检索的区别
- 关于dvmLoadNativeCode的相关方法(调试时可以利用)
- hibernate笔记(六)关于懒加载和load()方法之三——误区
- hibernate笔记(五)关于懒加载和load()方法之二
- hibernate笔记(五)关于懒加载和load()方法之二
- hibernate笔记: 关于懒加载和load()方法
- hibernate笔记(四)关于懒加载和load()方法之一
- hibernate的session.get/load方法的比较
- 看了水兄的关于字符串处理的2005方法,很好,就是没看懂,最后把相关知识帖了,放进我的博客里,供自己和大家学习。
- 第12周-阅读、修改和运行关于交通工具类的程序,回答问题,以理解相关技术方法
- 在hibernate中load()和get()方法的区别
- 关于Hibernate的相关配置