Hibernate中在持久化的类中定义的集合类的映射方法介绍和小注意

来源:互联网 发布:mac route命令 编辑:程序博客网 时间:2024/06/06 08:01

类的映射文件中用于表示集合的标签:
class1:Department 本类
class2:Employee

一.set:表示此属性的类型为Set

 
 二.list:表示此属性的类型为List
list标签的特点:查询出的数据会按照插入的顺序出现,具体的操作方法是在表中添加一个
自动增长的字段(例如下面的<index/>标签,column属性表示字段名称)用于记录插入的顺序,
查询的时候按照此字段排序
   

三.bag:类似于list标签
bag标签的特点:如果使用bag标签,跟list差不多,那此类的当前属性只能是List,
但是此标签的内部没有<index/>标签,不能创建记录顺序的那一列
  

四.map:此属性类型为Map
map标签的特点:具有key和value的键值对,并且需要指定key的类型和列名

五.此类的属性为数组类型
此类型的配置跟list类似

以上多种数据类型的使用规则:
一般情况下就会使用Set,因为Set的配置相对简单一些,并且插入的是不重复的数据
 如果要使用List,就要看有什么需求了:
  1.如果要使用List集合,但是又不想让Hibernate定义一列来记录顺序,就可以在类的属性
  使用List,映射的时候使用bag标签实现
  2.如果要保存顺序,就要用List来映射了,类的类型是List,映射也用list

如果需求中需要使用键值对的方式存放数据就要使用map了
而数组的使用就会更少了,因为数组的这种数据结构对于元素的变化操作就不是很方便,并且会经常
发生下表越界这种异常
 
=================================================================================
另外在使用Set的时候的一些小注意:
  

如上面的一个方法用于添加员工(Employee)的信息和部门(Department)信息
被*包围的代码所示,把得到的Set类型的数据又转换成了Set的实现类HashSet来保存,这样的话
再经过Hibernate中Session的save方法,就会出现异常,原因是:如果不转换成为HashSet类型数据,
原来的Set类型的数据经过Hibernate之后会被转换城为另一种数据类型org.Hibernate.collection.PersistentSet
来保存,其中org.Hibernate.collection.PersistentSet是jdk中Set类型的实现类,而HashSet也是
其实现类,那平级的数据类型相互转换当然会出现异常的.
当然类的属性类型更不能用HashSet了
得出的结论:在持久化的类中定义的集合类要定义成接口,不要定义成具体的实现类,就不会出现问题了

原创粉丝点击