配置Set(無序、不重複)屬性:
User對象對應的是兩張表,關係如下:
要說明的信息包括:
集合表的名稱——集合表 <set name... table...>
集合表的外鍵——集合外鍵 <key ...>
集合表的元素列——集合元素 <element...>
通過集合表的信息就可以想到集合表的結構,key不需要指定name,自動識別t_user表的主鍵作爲集合表的外鍵
package demo;
import java.util.Set;
public class User {
private int id;
private String name;
private Set<String> addressSet;
public Set<String> getAddressSet() {
return addressSet;
}
public void setAddressSet(Set<String> addressSet) {
this.addressSet = addressSet;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "id="+id+" name="+name;
}
}
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
This mapping demonstrates
(1) a table-per-subclass mapping strategy
(2) a simple component mapping
(3) recursive associations withing an inheritance tree
-->
<hibernate-mapping package="demo">
<!--
name:類名
table:表名
-->
<class name="User" table="t_user">
<id name="id" type="int" column="id" >
<generator class="native"/> <!--表示自動增長-->
</id>
<property name="name" type="string" column="name" />
<!--addressSet屬性 Set集合-->
<set name="addressSet" table="t_user_address">
<key column="userId"></key>
<element type="string" column="address"></element>
</set>
</class>
</hibernate-mapping>
public void testSave() throws Exception{
Session session=sessionFactory.openSession();
Transaction tx=session.beginTransaction(); //開啓事務
Set<String> set=new HashSet<String>();
set.add("中關村");
set.add("科技園");
set.add("1號");
User user=new User();
user.setName("張三");
user.setAddressSet(set);
//保存
session.save(user);
tx.commit();//提交事務
session.close(); //釋放資源,不一定是真正的關閉
}
配置List(有序、可重複)屬性:
要說明的信息包括:
集合表的名稱——集合表 <set name... table...>
集合表的外鍵——集合外鍵 <key ...>
集合表的元素列——集合元素 <element...>
集合元素的索引列——<list-index ...><!--addressList屬性 List集合-->
<list name="addressList" table="t_user_address">
<key column="userId"></key>
<list-index column="idx"></list-index>
<element type="string" column="address"></element>
</list>
配置數組屬性:
<!--addressList屬性 數組 與List映射一樣-->
<array name="addressList" table="t_user_address">
<key column="userId"></key>
<list-index column="idx"></list-index>
<element type="string" column="address"></element>
</array>
配置Map(無序、不重複)屬性:
要說明的信息包括:
集合表的名稱——集合表 <map name... table...>
集合表的外鍵——集合外鍵 <key ...>
集合表的元素列——集合元素 <element...>
集合元素的鍵——< map-key ...><!--addressMap屬性 Map集合-->
<map name="addressMap" table="t_user_addressMap">
<key column="userId"></key>
<map-key type="string" column="key_"></map-key>
<element type="string" column="address"></element>
</map>
<!--addressBag屬性 Bag集合:無序 可重複,與Set集合的映射基本一致-->
<bag name="addressBag" table="t_user_addressBag">
<key column="userId"></key>
<element type="string" column="address"></element>
</bag>
使用集合屬性時,一定要使用接口,而不能聲明爲具體的實現類。比如聲明爲Set,而不能是HashSet。
因爲經過Session操作後,集合就變成了Hibernate自己的集合實現類。