Hibernate里的获取有什么用

介绍

这篇文章主要为大家展示了“冬眠里的获取有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“冬眠里的获取有什么用”这篇文章吧。

现在越来越发现其实掌握Hibernate取回并不容易,春天用起来其实简单多了,但是在用Hibernate的时候真的是需要一定的时间积累,对一个项目组来说如果采用Hibernate * * *有一个对Hibernate比较清楚的人否则碰到问题就会成为项目的风险。
我想告诉各位的是,掌握Hibernate获取可能比你预期的难多了,当你轻松的告诉我,Hibernate获取很简单的时候该是你自己多反省了。(只有一种情况例外,你是一个牛人)

好了,一个引子废话那么多,其实今天只是想先说一说Hibernate取回的作用。

大家都知道,在Hibernate里为了性能考虑,引进了懒惰的概念,这里我们以父母和孩子为模型来说明

 public  class  Parent  implements  Serializable  {,,,,,,/* *, identifier  field  */,,,,,, private  Long  id;,,,,,,,/* *, persistent  field  */,,,,,, private  List 孩子的,,,,,,,,//skip  all  getter/setter  method ,,,,,,,},,,,,,,, public  class  Child  implements  Serializable  {,,,,,,/* *, identifier  field  */,,,,,, private  Long  id;,,,,,,,/* *, persistent  field  */,,,,,, private  net.foxlog.model.Parent 父母,,,,,,,,//skip  all  getter/setter  method ,,} 

在我们查询父母对象的时候,默认只有父母的内容,并不包含蔡尔兹的信息,如果在Parent.hbm.xml里设置懒=癴alse"的话才同时取出关联的所有孩子的内容。

问题是我既想要冬眠默认的性能又想要临时的灵活性该怎么办?,这就是Fetch的功能。我们可以把fetch与lazy="true"的关系类比为事务当中的编程式事务与声明式事务,不太准确,但是大概是这个意思。

总值,fetch就是在代码这一层给你一个主动抓取得机会.

Parent parent = (Parent)hibernateTemplate.execute(new HibernateCallback() {              public Object doInHibernate(Session session) throws HibernateException, SQLException {                  Query q = session.createQuery(                          "from Parent as parent "+                                  " left outer join fetch parent.childs " +                                  " where parent.id = :id"                  );                  q.setParameter("id",new Long(15));                  return (Parent)q.uniqueResult();              }           });           Assert.assertTrue(parent.getChilds().size() > 0);

你可以在lazy="true"的情况下把Fetch去掉,就会报异常. 当然,如果懒=癴alse"就不需要取回了有一个问题,使用取会有重复记录的现象发生,我们可以理解为获取实际上不是为父母服务的,而是为孩子服务的,所以直接取父母会有不匹配的问题。null

Hibernate里的获取有什么用