映射文件中配置集合属性
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;
}
}
配置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自己的集合实现类。
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自己的集合实现类。
相关文章推荐
- Hadoop、Spark、HBase与Redis的适用性见解
- Overlay网络与物理网络的关系
- SaltStack 实践课程一
- office正在配置
- android5.0文字自动大写
- android最简洁的定时器源代码
- 一种docker基础镜像制作方法
- iOS 提交app错误 90096解决办法
- Visual Studio 2012常用快捷键总结
- 通用BaseAction
- linux启动java进程的shell脚本(包括启动,停止,重启)
- [__NSCFArray insertObject:atIndex:]: mutating method sent to immutable objec
- 2016-百度之星-资格赛-Problem D
- c++ 之replace函数用法
- delphi 10.1 berlin datasnap提交clientdataset.delta报:invalid variant type conversion(类型转换错误)问题的解决
- hdu1455 Sticks ----DFS
- XHProf报告字段含义的解析
- Linux中的交叉编译
- 杭电5182
- SQL中的循环、for循环、游标