- 浏览: 179616 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Caelebs:
RMI及其调试(JDK1.6) -
walker2009:
...
svn如何使用import目录作为工作拷贝+我的svn学习笔记(转) -
ygsilence:
请问,怎么linux版本的xampp怎么整合现有tomcat, ...
[原创]xampp-tomcat- connector---- xampp 完美整合现有的tomcat [续] -
witcheryne:
zrong 写道skanion 写道VIMweejulius ...
svn + vim + ant + linux 竟然完全替代了eclipse -
zrong:
skanion 写道VIMweejulius 写道怎么重构用V ...
svn + vim + ant + linux 竟然完全替代了eclipse
Hibernate常见的集合映射主要有Set,List,Array,Map,Bag等,它们的特点如下:
1) Set集合是Hibernate中基础的集合类型,元素数据一般使用外键同主表关联,Set集合非常适用于集合元素不能重复的情况。
2) Set集合是无序的,集合元素并不是按照一定的顺序排列的,而List集合是有序的,每个集合元素需要有一个表示集合序号的标识,这样可以使用该标识来获得该集合元素。
3) 数组Array使用的是List的方式来表示的。
4) Map集合的特点是使用键值对,即Key-Value结构来存放集合元素,这样就需要对应的集合元素数据库表中包含对于Key的列。
5) Set集合石无序、不能有重复元素的,Hibernate提供了一个Bag集合,用来处理重复元素的情况。值得注意的是,Bag并不是Java API,而是Hibernate提供的。Bag集合映射和List不同,List的集合元素是有序的,需要有一个集合序号来标识集合元素的位置,List元素可以重复;而Bag集合元素不需要元素序号标识,元素也是可以重复的。
首先建立数据库表,SQL语句如下:
Sql代码
1. CREATE TABLE ‘message’(
2. 'id' int(11) NOT NULL,
3. 'setValue' varchar(100) NOT NULL,
4. 'listValue_id' int(11) NOT NULL,
5. 'listValue' varchar(100) NOT NULL,
6. 'arrayValue_id' int(11) NOT NULL,
7. 'arrayValue' varchar(100) NOT NULL,
8. 'mapValue_id' int(11) NOT NULL,
9. 'mapValue' varchar(100) NOT NULL,
10. 'bagValue' varchar(100) NOT NULL
11. )ENGINE = InnoDB DEFAULT CHARSET = gbk
12.
13. CREATE TABLE 'master'(
14. 'id' int(11) NOT NULL auto_increment,
15. 'name' varchar(100) NOT NULL default '',
16. PRIMARY KEY('id')
17. )ENGINE = InnoDB DEFAULT CHARSET = gbk
建立角色的实体类,代码如下:
Java代码
1. import java.io.Serializable;
2. import java.util.List;
3. import java.util.Map;
4. import java.util.Set;
5.
6. @SuppressWarnings({ "unchecked", "serial" })
7. public class Master implements Serializable {
8. private Integer id; //主键ID属性
9. private String name; //姓名name属性
10. private Set setValue;
11. private List listValue;
12. private String[] arrayValue;
13. private Map mapValue;
14. private List bagValue;
15.
16. public Integer getId() {
17. return id;
18. }
19. public void setId(Integer id) {
20. this.id = id;
21. }
22. public String getName() {
23. return name;
24. }
25. public void setName(String name) {
26. this.name = name;
27. }
28. public Set getSetValue() {
29. return setValue;
30. }
31. public void setSetValue(Set setValue) {
32. this.setValue = setValue;
33. }
34. public List getListValue() {
35. return listValue;
36. }
37. public void setListValue(List listValue) {
38. this.listValue = listValue;
39. }
40. public String[] getArrayValue() {
41. return arrayValue;
42. }
43. public void setArrayValue(String[] arrayValue) {
44. this.arrayValue = arrayValue;
45. }
46. public Map getMapValue() {
47. return mapValue;
48. }
49. public void setMapValue(Map mapValue) {
50. this.mapValue = mapValue;
51. }
52. public List getBagValue() {
53. return bagValue;
54. }
55. public void setBagValue(List bagValue) {
56. this.bagValue = bagValue;
57. }
58. }
类Message的Hibernate映射文件Message.hbm.xml如下:
Xml代码
1. <?xml version="1.0" encoding="utf-8"?>
2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4. <!--
5. Mapping file autogenerated by MyEclipse Persistence Tools
6. -->
7. <hibernate-mapping>
8. <class name="com.iprai.hibernate.collectionmapping" table="master" catalog="iprai">
9. <id name="id" type="java.lang.Integer">
10. <column name="id" />
11. <generator class="native"></generator>
12. </id>
13. <property name="name" type="java.lang.String">
14. <column name="name" length="100" not-null="true" />
15. </property>
16. <!--Set类型映射-->
17. <set name="setValue" table="message"> //定义对应的表
18. <key column="id" />
19. <element type="java.lang.String">
20. <column name="setValue" />
21. </element>
22. </set>
23.
24. <!--List类型映射-->
25. <List name="listValue" table="message">
26. <key column="id" />
27. <index column="listValue_id" /> //配置主键
28. <element type="java.lang.String" column="listValue" />
29. </List>
30.
31. <!--Array类型映射-->
32. <array name="arrayValue" table="message">
33. <key column="id"/>
34. <list-index column="arrayValue_id"/>
35. <element type="java.lang.String" column="arrayValue"/>
36. </array>
37.
38. <!--Map类型映射-->
39. <map name="mapValue" table="message">
40. <key column="id" />
41. <!--配置键值对-->
42. <map-key column="mapValue_id" type="java.lang.String" />
43. <element type="java.lang.String" column="mapValue" />
44. </map>
45.
46. <!--Bag类型映射-->
47. <bag name="bagValue" table="message">
48. <key column="id" /> //定义主键
49. <element type="string" column="bagValue" /> //定义元素类型
50. </bag>
51. </class>
52. </hibernate-mapping>
JUnit测试代码如下:
Java代码
1. import java.util.ArrayList;
2. import java.util.HashMap;
3. import java.util.HashSet;
4. import java.util.List;
5. import java.util.Map;
6. import java.util.Set;
7.
8. import org.hibernate.Session;
9.
10. import junit.framework.TestCase;
11.
12. public class MasterTest extends TestCase {
13.
14. public void testSave() {
15. Master master = new Master();
16. master.setName("JavaEye");
17.
18. Set setValue = new HashSet();
19. setValue.add("a");
20. setValue.add("b");
21. master.setSetValue(setValue);
22.
23. List listValue = new ArrayList();
24. listValue.add("c");
25. listValue.add("d");
26. master.setListValue(listValue);
27.
28. String[] arrayValue = new String[]{"e", "f"};
29. master.setArrayValue(arrayValue);
30.
31. Map mapValue = new HashMap();
32. mapValue.put("key_1", "value_1");
33. mapValue.put("key_2", "value_2");
34. master.setMapValue(mapValue);
35.
36. List bagValue = new ArrayList();
37. bagValue.add("h");
38. bagValue.add("i");
39. master.setBagValue(bagValue);
40.
41. Session session = null;
42. try {
43. session = HibernateUtils.getSession();
44. session.beginTransaction();
45. session.save(c);
46. session.getTransaction().commit();
47. }catch(Exception e) {
48. e.printStackTrace();
49. session.getTransaction().rollback();
50. }finally {
51. HibernateUtils.closeSession(session);
52. }
53. }
54. }
1) Set集合是Hibernate中基础的集合类型,元素数据一般使用外键同主表关联,Set集合非常适用于集合元素不能重复的情况。
2) Set集合是无序的,集合元素并不是按照一定的顺序排列的,而List集合是有序的,每个集合元素需要有一个表示集合序号的标识,这样可以使用该标识来获得该集合元素。
3) 数组Array使用的是List的方式来表示的。
4) Map集合的特点是使用键值对,即Key-Value结构来存放集合元素,这样就需要对应的集合元素数据库表中包含对于Key的列。
5) Set集合石无序、不能有重复元素的,Hibernate提供了一个Bag集合,用来处理重复元素的情况。值得注意的是,Bag并不是Java API,而是Hibernate提供的。Bag集合映射和List不同,List的集合元素是有序的,需要有一个集合序号来标识集合元素的位置,List元素可以重复;而Bag集合元素不需要元素序号标识,元素也是可以重复的。
首先建立数据库表,SQL语句如下:
Sql代码
1. CREATE TABLE ‘message’(
2. 'id' int(11) NOT NULL,
3. 'setValue' varchar(100) NOT NULL,
4. 'listValue_id' int(11) NOT NULL,
5. 'listValue' varchar(100) NOT NULL,
6. 'arrayValue_id' int(11) NOT NULL,
7. 'arrayValue' varchar(100) NOT NULL,
8. 'mapValue_id' int(11) NOT NULL,
9. 'mapValue' varchar(100) NOT NULL,
10. 'bagValue' varchar(100) NOT NULL
11. )ENGINE = InnoDB DEFAULT CHARSET = gbk
12.
13. CREATE TABLE 'master'(
14. 'id' int(11) NOT NULL auto_increment,
15. 'name' varchar(100) NOT NULL default '',
16. PRIMARY KEY('id')
17. )ENGINE = InnoDB DEFAULT CHARSET = gbk
建立角色的实体类,代码如下:
Java代码
1. import java.io.Serializable;
2. import java.util.List;
3. import java.util.Map;
4. import java.util.Set;
5.
6. @SuppressWarnings({ "unchecked", "serial" })
7. public class Master implements Serializable {
8. private Integer id; //主键ID属性
9. private String name; //姓名name属性
10. private Set setValue;
11. private List listValue;
12. private String[] arrayValue;
13. private Map mapValue;
14. private List bagValue;
15.
16. public Integer getId() {
17. return id;
18. }
19. public void setId(Integer id) {
20. this.id = id;
21. }
22. public String getName() {
23. return name;
24. }
25. public void setName(String name) {
26. this.name = name;
27. }
28. public Set getSetValue() {
29. return setValue;
30. }
31. public void setSetValue(Set setValue) {
32. this.setValue = setValue;
33. }
34. public List getListValue() {
35. return listValue;
36. }
37. public void setListValue(List listValue) {
38. this.listValue = listValue;
39. }
40. public String[] getArrayValue() {
41. return arrayValue;
42. }
43. public void setArrayValue(String[] arrayValue) {
44. this.arrayValue = arrayValue;
45. }
46. public Map getMapValue() {
47. return mapValue;
48. }
49. public void setMapValue(Map mapValue) {
50. this.mapValue = mapValue;
51. }
52. public List getBagValue() {
53. return bagValue;
54. }
55. public void setBagValue(List bagValue) {
56. this.bagValue = bagValue;
57. }
58. }
类Message的Hibernate映射文件Message.hbm.xml如下:
Xml代码
1. <?xml version="1.0" encoding="utf-8"?>
2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4. <!--
5. Mapping file autogenerated by MyEclipse Persistence Tools
6. -->
7. <hibernate-mapping>
8. <class name="com.iprai.hibernate.collectionmapping" table="master" catalog="iprai">
9. <id name="id" type="java.lang.Integer">
10. <column name="id" />
11. <generator class="native"></generator>
12. </id>
13. <property name="name" type="java.lang.String">
14. <column name="name" length="100" not-null="true" />
15. </property>
16. <!--Set类型映射-->
17. <set name="setValue" table="message"> //定义对应的表
18. <key column="id" />
19. <element type="java.lang.String">
20. <column name="setValue" />
21. </element>
22. </set>
23.
24. <!--List类型映射-->
25. <List name="listValue" table="message">
26. <key column="id" />
27. <index column="listValue_id" /> //配置主键
28. <element type="java.lang.String" column="listValue" />
29. </List>
30.
31. <!--Array类型映射-->
32. <array name="arrayValue" table="message">
33. <key column="id"/>
34. <list-index column="arrayValue_id"/>
35. <element type="java.lang.String" column="arrayValue"/>
36. </array>
37.
38. <!--Map类型映射-->
39. <map name="mapValue" table="message">
40. <key column="id" />
41. <!--配置键值对-->
42. <map-key column="mapValue_id" type="java.lang.String" />
43. <element type="java.lang.String" column="mapValue" />
44. </map>
45.
46. <!--Bag类型映射-->
47. <bag name="bagValue" table="message">
48. <key column="id" /> //定义主键
49. <element type="string" column="bagValue" /> //定义元素类型
50. </bag>
51. </class>
52. </hibernate-mapping>
JUnit测试代码如下:
Java代码
1. import java.util.ArrayList;
2. import java.util.HashMap;
3. import java.util.HashSet;
4. import java.util.List;
5. import java.util.Map;
6. import java.util.Set;
7.
8. import org.hibernate.Session;
9.
10. import junit.framework.TestCase;
11.
12. public class MasterTest extends TestCase {
13.
14. public void testSave() {
15. Master master = new Master();
16. master.setName("JavaEye");
17.
18. Set setValue = new HashSet();
19. setValue.add("a");
20. setValue.add("b");
21. master.setSetValue(setValue);
22.
23. List listValue = new ArrayList();
24. listValue.add("c");
25. listValue.add("d");
26. master.setListValue(listValue);
27.
28. String[] arrayValue = new String[]{"e", "f"};
29. master.setArrayValue(arrayValue);
30.
31. Map mapValue = new HashMap();
32. mapValue.put("key_1", "value_1");
33. mapValue.put("key_2", "value_2");
34. master.setMapValue(mapValue);
35.
36. List bagValue = new ArrayList();
37. bagValue.add("h");
38. bagValue.add("i");
39. master.setBagValue(bagValue);
40.
41. Session session = null;
42. try {
43. session = HibernateUtils.getSession();
44. session.beginTransaction();
45. session.save(c);
46. session.getTransaction().commit();
47. }catch(Exception e) {
48. e.printStackTrace();
49. session.getTransaction().rollback();
50. }finally {
51. HibernateUtils.closeSession(session);
52. }
53. }
54. }
发表评论
-
(转)postgreSQL 实现按月按年,按日统计 分组统计
2011-12-26 18:11 3913--按年分组查看 select to_char ... -
(转)aop:pointcut expression解析
2011-12-26 14:20 1229execution(* com.aptech.jb.epet. ... -
(转)SQL语句中,为什么where子句不能使用列别名,而order by却可以
2011-12-05 10:34 2166sqlserver查询的执行顺序是: (1)FROM < ... -
postgresql 导入和导出数据
2011-09-22 10:59 6284自oracle自收购sun以来,牵起了对java的种种纠纷, ... -
JSP页面跳转方法荟萃
2011-09-19 14:23 14901. response.sendRedirct("跳 ... -
如何同时启动多个Tomcat服务器(转)
2011-09-16 10:05 860前些时日,出于某种需要,需要同时启动多个Tomcat服务器,在 ... -
在浏览器查看svn中代码的解决方案(转)
2011-09-15 15:38 5251重新安装svn+apache以后,发现一个问题,比如java源 ... -
如何让svnserve.exe在WINDOWS中自动运行
2011-09-15 14:50 1191将svn设置成为系统服务自动运行就行了。 方法: 在Windo ... -
[原创]SS FrameWork For PHP 4.0 (专注于extjs和flex的PHP MVC核心框架)
2011-09-15 13:28 3601这是我以前写的PHP MVC 框架核心, 麻雀虽小五脏俱全,完 ... -
[原创]xampp-tomcat- connector---- xampp 完美整合现有的tomcat [续]
2011-09-15 13:18 5672在笔者拙作 xampp(apache+mod_jk)整合现有 ... -
Bat脚本中带ANT命令,会忽略ANT后面的命令?
2011-09-14 15:47 1962如题, bat中带有ant -debug 则后面的命令没有执行 ... -
xampp(apache+mod_jk)整合现有的tomcat
2011-09-14 12:15 52611. Xampp官网 http://www.apach ... -
svn + vim + ant + linux 竟然完全替代了eclipse
2011-09-14 09:18 3145很难想象, 一个公司只用 svn + vim + ant + ... -
Ant <Delete> 如何只删掉文件夹下所有文件和文件夹(转)
2011-09-13 18:20 3526用fileset 来过滤要删掉的目录和文件 <dele ... -
ANT的安装/配置笔记(转)
2011-09-13 14:38 754内容摘要: ant是一个基 ... -
windows 安装tomcat服务
2011-09-13 14:16 1025D:\usr\tomcat\bin>service.ba ... -
struts 1 中 <html:form>
2011-09-13 12:03 11742来看看 使用 ActionForm 这个主题,当时使用了一个静 ... -
关于struts标签bean:message(转)
2011-09-13 11:55 1254bean:message标签用来从指 ... -
Servlet中的filter(转)
2011-09-13 11:21 1031Filter:Filter 技术是servlet 2.3 新增 ... -
Filter的用处与种类
2011-09-13 11:19 1237Filter有如下几个用处。 •在HttpServletRe ...
相关推荐
常见的集合映射类型有 Set、List、Array、Map 和 Bag 等,每种类型都有其特点和应用场景。 Set 集合映射 Set 集合是 Hibernate 中基础的集合类型,元素数据一般使用外键同主表关联。Set 集合非常适用于集合元素不...
在Hibernate的映射文件(.hbm.xml)中,我们通常使用`<set>`, `<list>`, `<map>`等标签来定义集合映射。每个标签都有对应的属性,例如: - `name`: 对象属性名。 - `table`: 所映射的数据库表名。 - `inverse`: ...
在给定的文档“JAVA培训-HIBERNATE的集合映射.doc”中,主要讲解了Hibernate如何处理不同类型的集合映射,包括Set、List、Array、Map和Bag。我们将详细讨论这些集合映射以及它们在实际应用中的使用。 首先,我们来...
Hibernate支持多种集合映射类型,包括List、Set、Map、Bag、Array等。它们之间的区别主要在于元素的唯一性、顺序性和映射到数据库的实现方式。例如,List和Array维护元素的插入顺序,而Set不允许重复元素;Map则...
在Java中,常见的集合类型有List、Set、Map等,它们在Hibernate中都有对应的映射方式。 1. **List映射**:List是最基础的集合类型,它允许元素重复并保持插入顺序。在Hibernate中,我们可以使用`<list>`标签来映射...
集合映射可以是 set、list、map、bag、array 等。级联策略控制可以控制集合元素的保存和删除。排序策略可以控制集合元素的顺序。 聚合映射 Hibernate 的聚合映射可以将多个对象聚合到一个对象中。聚合映射可以是...
在 Hibernate 中,可以通过 `<set>` 标签来配置 Set 集合的映射。下面详细介绍 `<set>` 标签的各个属性: - **name**:必须指定的属性,表示集合的名称。 - **access**:可选属性,指定访问策略。 - **table**:可...
在Hibernate中,集合可以通过`<set>`, `<list>`, `<map>`, `<bag>` 或 `<array>` 标签进行映射。每个标签对应不同的集合类型,例如: 1. `<set>`:对应Set接口,不允许有重复元素。 2. `<list>`:对应List接口,元素...
6. Bag、Set、List、Array、Map:用于表示集合类型的映射,如列表或映射关系。 NGen工具的主要功能是: 1. 预先编译:NGen会将IL(中间语言)代码转换为本机机器码,使得应用程序在运行时无需再进行JIT(Just-In-...
该属性仅存在于集合标记的元素中,如`<set>`、`<map>`、`<list>`、`<array>`和`<bag>`等。它的作用是决定是否将对集合对象的修改反映到数据库中。 - **Inverse 的作用** - **定义**:`inverse`属性决定了一端是否...
5. **集合类型**:`set`、`map`、`list`、`bag`、`array`等元素定义了集合类型在Hibernate中的实现方式。 6. **继承策略**:`subclass`、`joined-class`、`union-class`等元素用于定义不同的继承策略。 #### 三、...