标签:nsa ber title 加载 table 实体类 tostring 带来 log
本节内容:
1 延迟策略概念
2 实体对象延迟加载
如果想对实体对象使用延迟加载,必须要在实体的映射配置文件中进行相应的配置,如下所示:
<!-- class的lazy属性设为true,则为实体的延迟加载 --> <class name="com.silvan.pojo.News" table="news" lazy="true"> <id name="id"> <generator class="native"></generator> </id> <property name="title" /> <property name="content" /> </class>
插入数据后使用下面代码进行查询测试:
public void query(){ Session session = HibernateUtil.getSession(); Transaction tx = null; try{ tx = session.beginTransaction(); News news=(News)session.load(News.class,21);//(1) System.out.println(news.getTitle());//(2) }catch(Exception e){ if(tx!=null){ tx.rollback(); } e.printStackTrace(); }finally{ HibernateUtil.closeSession(session); } }
解析:
3 集合类型的延迟加载
为了对集合类型使用延迟加载,我们必须如下配置集合的关联部分:
<!-- 集合的lazy属性设置为true,则为集合类型的延迟加载--> <set name="editor" table="editor" lazy="true"> <key column="id"></key> <element type="string" column="name"></element> </set>
通过将<set>元素的lazy属性设置为true来开启集合类型的延迟加载特性。
我们看下面插入数据和查询的测试代码:
//插入 News news = new News(); news.setTitle("title"); news.setContent("content"); Set editor = new HashSet(); editor.add("qinqin1"); editor.add("qinqin2"); news.setEditor(editor); session.save(news); //查询 News news=(News)session.get(News.class,1); //当集合lazy属性为true,只有在调用集合的时候才会执行集合查询语句,与使用get或load无关 Set editor = news.getEditor();//(1) for(Object obj:editor){//(2) System.out.println(obj.toString()); }
解析:
当程序执行到(1)处时,这时并不会发起对关联数据的查询来加载关联数据,只有运行到(2)处时,真正的数据读取操作才会开始,这时Hibernate会根据缓存中符合条件的数据索引,来查找符合条件的实体对象。
4 属性的延迟加载
标签:nsa ber title 加载 table 实体类 tostring 带来 log
原文地址:http://www.cnblogs.com/zhouyeqin/p/7196130.html