hiberante入门(十):其它集合类型

八、其它集合类型

说明:在前面我们已经使用过set集合类型,其实除了set,Hibernate中还有listBagMap这三种集合类型。

1.    list集合的使用:

在前面的“一对多的关系”,已经使用过<set>,为了保存以前的操作,现重建一个名为“TheCollectionMapping”的新项目,把以前的“一对多关系”中用到的相关内容复制到此项目下即可。但有几点需要特别注意:(1)同样注意导入包,并注意主配置文件对实体配置文件的关联 (2)需要修改原Department中的<set>内容为:private List<Employee> emps; 并修改原实体配置文件<set>配置内容为<list>内容如下:

<list name="emps">
			<key column="depart_id" />
			<list-index column="order_by" />
			<one-to-many class="Employee" />
</list>   

 

3)并注意测试类中相应的修改(4)强调说明的是list查询时,具有顺序性,可以查看此项目下测试类的说明。(5)再次强调,为了充分理解一些问题,我们可以查看执行后表结构,也可以注释掉一些内容查看异常情况,并学会解决异常。注意配置文件中相关配置的作用,并尝试探索底层实现。

2.bag集合的使用:

如果在实体类中使用了List类型的属性,而我们并不希望保证集合顺序(保证集合顺序会采用排序算法,因而会占一些CPU资源)可以在配置文件中使用<bag>,它的使用情况与<list>唯一不同的就是不保证集合顺序。

3.map集合的使用:

一般是和实体类中java.util.Map属性进行配合使用,而且使用情况较少。除非某些特殊要求。 总结使用规则:大部分情况下使用<set>;需要保证集合顺序时使用<list>;想用java.util.List而不想保证顺序时,使用〈bag〉;<map>作为特殊使用。配置也基本一样,只是在<map>元素下多了<map-key>

4.使用集合中的注意事项:

1)在实体类中集合只能被定义成接口而不能定义成具体类,因为集合会在运行时被替换成Hibernate的实现,而事实上把实体类的属性定义成接口也更便于扩展及良好的维护。这里不防提出一个原则,“尽量用接口定义”。(2Hibernate操作List持久对象时,会用org.hibernate.collection.PersistentList重新实现List接口,操作完成后会把这个实现类重新setXXX放置。具体请参见TheCollectionMapping项目下的OneToManyTest类说明。其它的集合对象也是一样的道理。

 

你可能感兴趣的:(算法,Hibernate)