Hibernate对象关系映射总结
} 测试iterator*/ public void testQueryIterate() { Session session = sf.openSession(); session.beginTransaction(); Iterator<Category> categories = (Iterator<Category>)session.createQuery("from Category").iterate(); 它取出所有数据的id:等到下面的用到时才根据刚才取出的id再发sql语句去取该对象*/ while(categories.hasNext()) { Category c = categories.next(); System.out.println(c.getName()); } 再次查询同样的东西时:iterator利用了session级别的缓存:不会发sql从数据库去查询*/ Iterator<Category> categories2 = (Iterator<Category>)session.createQuery("from Category").iterate(); 它还会取出所有数据的id:再从缓存中去取该对象*/ while(categories2.hasNext()) { Category c = categories2.next(); System.out.println(c.getName()); }
session.getTransaction().commit(); session.close(); }
==================================hibernate主键生成总结=======================================
***************************************对应数字型的主键********************************************* 1:oracle用序列================主键字段是数字类型 在Hibernate中使用oracle的sequence
一. 为表创建自增长字段有两种,一种是不同的表使用各自的Sequence,方法如下: 2.在你的hbm.xml中的配置
<id column="ID" name="id" type="integer"> <generator class="sequence">
<param name="sequence">HETONG_SEQ</param> </generator> </id>
在使用的时候需要注意,Hibernate对于sequence的主键的要求是一定要是shor,long,或者integer 2、native:跨数据库时使用,由底层方言产生。:这个要先建一个公共的序列:hibernate_sequence <id name="id" column="id"> <generator class="native"/> </id>
注:使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列。 如果Oracle中没有该序列,连Oracle数据库时会报错。
2:mysql/sqlserver的主键处理:主键字段是数字类型并且这时表的主键字段要设置为自增长 <id name="id" column="id">