Hibernate中Session的load()和get()方法如何使用,举列子说明

 我来答
百度网友4b68195
2012-11-23 · TA获得超过1520个赞
知道大有可为答主
回答量:1773
采纳率:100%
帮助的人:1732万
展开全部
10.3. 装载对象
如果你知道某个实例的持久化标识(identifier),你就可以使用Session的load()方法 来获取它。 load()的另一个参数是指定类的.class对象。 本方法会创建指定类的持久化实例,并从数据库加载其数据(state)。
Cat fritz = (Cat) sess.load(Cat.class, generatedId);// you need to wrap primitive identifiers
long id = 1234;
DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );
此外, 你可以把数据(state)加载到指定的对象实例上(覆盖掉该实例原来的数据)。
Cat cat = new DomesticCat();
// load pk's state into cat
sess.load( cat, new Long(pkId) );
Set kittens = cat.getKittens();
请注意如果没有匹配的数据库记录,load()方法可能抛出无法恢复的异常(unrecoverable exception)。 如果类的映射使用了代理(proxy),load()方法会返回一个未初始化的代理,直到你调用该代理的某方法时才会去访问数据库。 若你希望在某对象中创建一个指向另一个对象的关联,又不想在从数据库中装载该对象时同时装载相关联的那个对象,那么这种操作方式就用得上的了。 如果为相应类映射关系设置了batch-size, 那么使用这种操作方式允许多个对象被一批装载(因为返回的是代理,无需从数据库中抓取所有对象的数据)。
如果你不确定是否有匹配的行存在,应该使用get()方法,它会立刻访问数据库,如果没有对应的记录,会返回null。
Cat cat = (Cat) sess.get(Cat.class, id);
if (cat==null) {
cat = new Cat();
sess.save(cat, id);
}
return cat;
你甚至可以选用某个LockMode,用SQL的SELECT ... FOR UPDATE装载对象。 请查阅API文档以获取更多信息。
Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);
注意,任何关联的对象或者包含的集合都不会被以FOR UPDATE方式返回, 除非你指定了lock或者all作为关联(association)的级联风格(cascade style)。
任何时候都可以使用refresh()方法强迫装载对象和它的集合。如果你使用数据库触发器功能来处理对象的某些属性,这个方法就很有用了。
-------源于Hibernate中文参考手册
更多追问追答
追问
这段代码有错吗?有的话,怎么改正?
  public void testLoad(){
  Session session = HibernateSessionFactory.getSession();
  Student stu = (Student) session.load(Student.class, "s001");
  Transaction tx = session.beginTransaction();
  tx.commit();
  HibernateSessionFactory.closeSession();
  System.out.println(stu.getSname());
  }
 
追答
public void testLoad(){
  Configuration cf= new Configuration().configure();
SessionFactory sessionFactory=cf.buildSessionFactory();
Session se=sessionFactory.openSession();
Student stu = (Student) session.load(Student.class, "s001");

se.close();
ystem.out.println(stu.getSname());

  }
woshidaniel
2015-09-08 · TA获得超过9240个赞
知道小有建树答主
回答量:1760
采纳率:96%
帮助的人:959万
展开全部

1、定义一个实体类

2、根据主键获取数据记录

示例:

Users user = (Users)session.load(Users.class, userId);   //Users是实体类,userId是主键值
Users user = (Users)session.get(Users.class, userId);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Java_Mr
2012-11-23 · TA获得超过216个赞
知道小有建树答主
回答量:258
采纳率:0%
帮助的人:105万
展开全部
load()是首先访问缓存,如果没有则访问数据库,get()是直接访问数据库!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式