Hibernate集合类映射.docx
《Hibernate集合类映射.docx》由会员分享,可在线阅读,更多相关《Hibernate集合类映射.docx(46页珍藏版)》请在冰豆网上搜索。
Hibernate集合类映射
Hibernate集合类映射
1.Java集合类介绍
Java中的集合类用于存储一组对象,其中的每一个对象称之为元素。
Java.util包提供经常使用的java集合类有ArrayList、Hashset、HashMap、HashTable等。
这些类都是java.util.Collection和java.util.Map接口的一些实现类。
java.util.Collection是顶层的一个接口类。
java.util.List、java.util.Set、java.util.StoreSet是三个继承Collection接口的子接口。
而常用的java.util.Vector、java.util.ArrayList、java.util.HashSet、java.util.TreeSet等则是上述三个子接口的实现类。
java.util.Map也是最顶层的接口类,该类只有一个子接口即java.util.SortedMap,另外java提供了Map的多个实现类,如java.util.HashMap、java.util.HashTable、java.util.TreeMap等。
Java集合类主要分三种类型:
Set:
集合。
元素不按照特定方式排序,并且不可有重复
List:
集合。
元素按照索引位置排序,可以有重复
Map:
集合。
每个元素由一个键值对(key-value)组成,键对象不能重复,但是值对象
可以重复
Sets=newHashSet();
Iteratoritr=s.itorator();//获取HashSet对象的循环指示器
While(itr.hasNext()){
System.out,println((String)itr.next());
}
Lista=newArrayList();
For(inti=0;i<=a.size();i++){//根据ArrayList对象的索引值循环读取
System.out,println(i+”:
”+(String)a.get(i));
}
Maph=newhashMap();
h.put(“001”,“Hibernate”);
h.put(“002”,”Struts”);
h.put(“003”,“Spring”);
Iteratoritr_key=h.keySet().iterator();//获取HashMAp对象的键集合的循环指示器
While(itr_key.hasNext()){
Stringkey=(String)itr_key.next();
System.out,println(key+“:
”+(String)h.next(key));
}
集合类的使用方式总结:
Set:
与Iterator接口结合使用,使用循环指示器循环读取Set集合中的元素
List:
使用元素索引值顺序读取List集合中的元素
Map:
首先使用循环指示器获取Map的键集合中的键对象,然后通过键对象读取值对象。
2.Hibernate的集合类映射
根据java集合类的特点,Hibernate中可以分为如下几种集合类映射:
:
无序,通常用于一对多或多对多关联关系映射。
:
有序,必须要有一个索引字段。
无序,必须要有一个映射关键字字段。
:
有序,必须要有一个索引字段。
:
有序,必须要有一个索引字段
不同的接口类需要映射到不同的Hibernate集合类映射元素
集合类接口
常用实现类
映射元素
Java.util.Set
Java.util.ArrayList
Java.util.Vector
Java.util.Collection
Java.util.HashSet
Java.util.ArrayList
Java.util.Map
Java.util.HashMap
Java.util.Hashtable
Java.util.StoreSet
Java.util.TreeSet
Java.util.StoreMap
Java.util.TreeMap
3.集合类映射的定义
集合类映射的一般定义格式:
<集合类映射元素><!
--set、map、list等标记-->
<集合外键><!
--对应于集合实体的主键的外键-->
<集合索引字段/><!
--除set和bag以外的集合映射需要映射索引值或字段-->
<集合元素/>
集合类映射元素>
import java.util.List; import java.util.Map;import java.util.Set;
1.public class CollectionMapping {
2. private int id;
3. private String name;
4. private Set setValues;
5. private List listValues;
6. private String[] arrayValues;
7. private Map mapValues;
8. public String[] getArrayValues() { return arrayValues; }
9. public void setArrayValues(String[] arrayValues) {
10. this.arrayValues = arrayValues;
11. }
12. public int getId() {return id; }
13. public void setId(int id) { this.id = id;}
14. public List getListValues() {return listValues; }
15. public void setListValues(List listValues) {
16. this.listValues = listValues;
17. }
18. public Map getMapValues() { return mapValues;}
19. public void setMapValues(Map mapValues) {
20. this.mapValues = mapValues;
21. }
22. public Set getSetValues() { return setValues; }
23. public void setSetValues(Set setValues) {
24. this.setValues = setValues;
25. }
26. public String getName() { return name;}
27. public void setName(String name) {this.name = name;}
28. }
1.
xml version="1.0"?
>
2.
DOCTYPE hibernate-mapping PUBLIC
3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4. "
5.
6. 7.table="t_collection_mapping">
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
4.Hibernate关联关系映射目录
│
├─单向关联
│ ├─ 一对一外键单向关联
│ ├─ 一对一主键单向关联
│ ├─ 一对一连接表单向关联
│ ├─ 一对多外键单向关联
│ ├─ 一对多连接表单向关联
│ ├─ 多对一外键单向关联
│ ├─ 多对一连接表单向关联
│ └─ 多对多单向关联
└─双向关联
├─ 一对一外键双向关联
├─ 一对一主键双向关联
├─ 一对一连接表双向关联
├─ 一对多外键双向关联
├─ 一对多连接表双向关联
└─ 多对多双向关联
4.1一对一外键单向关联
模型一个人(Person)对应一个地址(address)
实体:
publicclassPerson{
privateintpersonid;
privateStringname;
privateintage;
privateAddressaddress;
}
publicclassAddress{
privateintaddressid;
privateStringaddressdetail;
}
表模型
address
+----------------+----------------+------+------+----------+-------------------+
|Field|Type|Null|Key|Default|Extra|
+----------------+----------------+------+------+----------+-------------------+
|addressid|int(11)|NO|PRI|NULL|auto_increment|
|addressdetail|varchar(255)|YES||NULL||
+----------------+--------------+-------+------+-----------+------------------+
person;
+-----------+------------------+------+------+---------+------------------+
|Field|Type|Null|Key|Default|Extra|
+-----------+-----------------+-------+------+---------+-------------------+
|personid|int(11)|NO|PRI|NULL|auto_increment|
|name|varchar(255)|YES||NULL||
|age|int(11)|YES||NULL||
|addressId|int(11)|YES|UNI|NULL||
+-----------+--------------+------+-----+---------+----------------------+
映射方法:
在Person中添加Address属性,映射配置为:
--用来映射关联POcolumn是Address在该表中的外键列名,增加unique变成“1-1”-->
4.2一对一主键单向关联
1-1的关联可以基于主键关联,但基于主键关联的持久化类不能拥有自己的主键生成策略,它的主键由关联类负责生成。
另外,增加one-to-one元素来关联属性,必须为one-to-one元素增加constrained="true"属性,表明该类主键由关联类生成。
模型:
一个人(Person)对应一个地址(Address)
实体:
publicclassPerson{
privateintpersonid;
privateStringname;
privateintage;
privateAddressaddress;
}
publicclassAddress{
privateintaddressid;
privateStringaddressdetail;
}
表模型
address
+----------------+----------------+------+------+----------+-------------------+
|Field|Type|Null|Key|Default|Extra|
+----------------+----------------+------+------+----------+-------------------+
|addressid|int(11)|NO|PRI|NULL|auto_increment|
|addressdetail|varchar(255)|YES||NULL||
+----------------+--------------+-------+------+-----------+------------------+
person;
+------------+----------------+------+------+---------+------------------+
|Field|Type|Null|Key|Default|Extra|
+------------+---------------+-------+------+---------+-------------------+
|personid|int(11)|NO|PRI|NULL|auto_increment|
|name|varchar(255)|YES||NULL||
|age|int(11)|YES||NULL||
|addressId|int(11)|YES|UNI|NULL||
+------------+--------------+------+-----+---------+----------------------+
映射方法:
在Person中配置id生成策略为:
--基于主键关联时,主键生成策略是foreign,表明根据关联类生成主键-->
--关联持久化类的属性名-->
address
......
--用于映射1-1关联-->
--基于主键关联时,主键生成策略是foreign,表明根据关联类生成主键-->
--关联持久化类的属性名-->
address
--用于映射1-1关联-->
4.3一对一连接表单向关联
这种情况很少见,但Hibernate同样允许采用连接表关联1-1.有连接表的1-1同样只需要将N-1的many-to-one元素增加unique="true"属性即可。
publicclassPerson{
privateintpersonid;
privateStringname;
privateintage;
privateAddressaddress;
}
publicclassAddress{
privateintaddressid;
privateStringaddressdetail;
}
表结构
address;
+---------------+--------------+------+-----+---------+----------------+
|Field|Type|Null|Key|Default|Extra|
+---------------+--------------+------+-----+---------+----------------+
|addressid|int(11)|NO|PRI|NULL|auto_increment|
|addressdetail|varchar(255)|YES||NULL||
+---------------+--------------+------+-----+---------+----------------+
join;
+--------------+---------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+--------------+---------+------+-----+---------+-------+
|personid|