Hibernate要求持久化集合属性字段必须声明为接口,实际的接口可以是java.util.Set,java.util.Collection,java.util.List,java.util.Map,java.util.SortedSet,java.util.SortedMap等,甚至是自己定义类型(只需要实现org.hibernate.usertype.UserCollectionType接口即可)。
  Hibernate之所以要求用集合接口声明集合属性字段,是因为当程序持久某个实例时,Hibernate会自动把程序中的集合实现类替换成Hibernate自己的集合实现类,因此不要试图把Hibernate集合属性强制转换为集合实现类,如HashSet,HashMap等,但可以转换为Set,Map等集合,因为Hibernate自己的集合类也实现了Map,Set等接口。

集合映射的元素大致有如下这些:
list:用于映射List集合属性
set:用于映射Set集合属性
map:用于映射Map集合属性
array:用于映射数组集合属性
rimitive-array:专门用于映射基本数据类型的数组
bag:用于映射无须集合
idbag:用于映射无序集合,但为集合增加逻辑次序

List集合属性:Person.java和Person.hbm.xml

public class Person{
private String id;
private String name;
private List<String> schools;
......
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.test.domain"> <class name="Person" table="person">
<id name="id" column="id" type="integer">
<generator class="native" />
</id>
<property name="name" type="string" length="255" />
<list name="school" table="school">
<key column="person_id" not-null="true" />
<list-index column="list_order" />
<element type="string" column="school_name" />
</list>
</class>
</hibernate-mapping>

数组属性:Person.java和Person.hbm.xml

public class Person{
private String id;
private String name;
private String[] schools;
......
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.test.domain"> <class name="Person" table="person">
<id name="id" column="id" type="integer">
<generator class="native" />
</id>
<property name="name" type="string" length="255" />
<array name="school" table="school">
<key column="person_id" not-null="true" />
<list-index column="list_order" />
<element type="string" column="school_name" />
</array>
</class>
</hibernate-mapping>

set集合属性:Person.java和Person.hbm.xml

public class Person{
private String id;
private String name;
private Set<String> schools;
......
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.test.domain"> <class name="Person" table="person">
<id name="id" column="id" type="integer">
<generator class="native" />
</id>
<property name="name" type="string" length="255" />
<set name="schools" table="school">
<key column="person_id" not-null="true" />
<element type="string" column="school_name" not-null="true" />
</set>
</class>
</hibernate-mapping>

bag元素映射:Person.java和Person.hbm.xml

public class Person{
private String id;
private String name;
private Collection<String> schools;
......
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.test.domain"> <class name="Person" table="person">
<id name="id" column="id" type="integer">
<generator class="native" />
</id>
<property name="name" type="string" length="255" />
<bag name="schools" table="school">
<key column="person_id" not-null="true" />
<element type="string" column="school_name" not-null="true" />
</bag>
</class>
</hibernate-mapping>

Map集合属性:Person.java和Person.hbm.xml

public class Person{
private String id;
private String name;
private Map<String,Float> schools;
......
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.test.domain"> <class name="Person" table="person">
<id name="id" column="id" type="integer">
<generator class="native" />
</id>
<property name="name" type="string" length="255" />
<map name="schools" table="school">
<key column="person_id" not-null="true" />
<map-key column="subject" type="string" />
<element column="grade" not-null="float" />
</map>
</class>
</hibernate-mapping>

Hibernate映射集合属性的更多相关文章

  1. 1-6 hibernate映射集合属性

    1.集合类框架 以Tree开头都是按顺序,默认情况下是升序排列. 以Linked 开头的都是按插入顺序排列的. 2.在hibernate中要持久化集合属性时必须将其声明为接口,如 private Se ...

  2. (转)Hibernate框架基础——映射集合属性

    http://blog.csdn.net/yerenyuan_pku/article/details/52745486 集合映射 集合属性大致有两种: 单纯的集合属性,如像List.Set或数组等集合 ...

  3. Hibernate映射Map属性

    看到一篇Hibernate 映射Map属性的文章挺好的转载一下原地址:http://blog.sina.com.cn/s/blog_86f4502c0101fs1x.html Map集合属于有序集合, ...

  4. hibernate学习系列-----(9)hibernate对集合属性的操作之Map集合篇

    照旧,先新建一个StudentMap.java实体类,将hobby属性使用map集合接口来存放: package com.joe.entity; import java.util.Map; publi ...

  5. hibernate学习系列-----(8)hibernate对集合属性的操作之Collectioon集合篇

    度过短暂的周末,又到了周一,继续轻松而愉快的学习,紧承以前的学习,继续了解hibernate对集合的操作学习之旅! 在上一篇中,就已经提前说过,这一篇的内容以及下一篇的内容会有很多相似之处,这里就不再 ...

  6. hibernate学习系列-----(7)hibernate对集合属性的操作之List集合篇

    今天要写的内容其实不多,本打算将hibernate对集合的操作的内容直接归结为一篇的,但想一想,还是分开写的比较好,毕竟前面的已经发布出去来了,废话不多说,开始吧! 依旧新建一个StudentList ...

  7. hibernate学习系列-----(6)hibernate对集合属性的操作之Set集合篇

    先说一段废话吧,本打算每天把所学的知识总结为博客的,但是昨天为什么没有写呢?没有学习吗?No,那是为什么?贪玩,对,这位同学说对了,老实说昨天感觉身体不怎么舒服,大家都知道,这其实就是为自己懒找借口, ...

  8. Hibernate映射Map属性2

    Hibernate在映射Map属性时生成映射文件.需要注意的一些地方.下面是我的一个例子. Java类如下 public class NameAndNumber { private Integer i ...

  9. Hibernate对集合属性的操作---基础学习

    1:Set集合属性操作 1).Hibernate3以后支持大部分重要的JDK集合接口映射,Set集合接口的配置:  >在xxx.hbm.xml文件中使用<set>标签 2).< ...

随机推荐

  1. 如何阻止iframe里引用的网页自动跳转

    今天做了个网页,要在网页http://www.58shuwu.com/to/21766654/Legend%20of%20Miyue/ 里设置一个iframe,然后套用其他的网站.使用http://m ...

  2. Flex显示麦克风当前音量

    Flex动态显示麦克风当前音量 效果: 代码: <?xml version="1.0" encoding="utf-8"?> <s:Appli ...

  3. 如何使用Xcode6 调试UI,Reveal

    实际测试需要使用IOS8并且32-bit的设备:具体打开调试的方法有三种: 1.底部调试菜单中: 2,debug菜单中 3.debug navigator 中

  4. 常用sqlserver语句

    1.查看表上的索引 sp_helpIndex [表名]  --查询表上拥有的索引 2.更新其它表 update 申请信息set 研发部门='123',版本信息='321'where 单号=(selec ...

  5. map中的erase成员函数用法

    转载于 http://www.cnblogs.com/graphics/archive/2010/07/05/1771110.html  http://hi.baidu.com/sdkinger/it ...

  6. JS内存管理测试

    打开调试器,切换到timer,点击左下角的record按钮开始,切换到memory视图,在文档中点击鼠标左右键,看股价走势图 function Allocate(kbs){ this.mem = ne ...

  7. [Unity3D+算法]一小时做个2048

    原地址:http://blog.csdn.net/dingxiaowei2013/article/details/36462749 048是继FlappyBird之后另一个比较热的轻量级的手游,简单易 ...

  8. tornado的cookie和secure cookie

    tornado里面有关几个cookie的处理,在web.py文件里. get_cookie, set_cookie普通的设置cookie, clear_cookie, clear_all_cookie ...

  9. How to define Servlet filter order of execution using annotations

    If we define Servlet filters in web.xml, then the order of execution of the filters will be the same ...

  10. Eclipse Error: Unable to set localhost. This prevents creation of a GUID.

    Symptoms The following error appears in the atlassian-confluence.log: 2011-03-16 18:20:03,021 ERROR ...