您的位置:首页 > 其它

映射文件中配置集合属性

2016-05-17 17:27 567 查看
配置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>

配置Bag(Java中没有)集合属性:无序、可重复



<!--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自己的集合实现类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: