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. tomcat配置及使用 环境变量设置

    Tomcat的配置及测试: 第一步:下载tomcat,然后解压到任意盘符 第二步:配置系统环境变量 我这里是tomcat5.5,解压到的D盘 (路径为: D:\Program Files\tomcat ...

  2. WPF 多线程处理(5)

    WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) 项目的目录: 以下是FileStroage的 ...

  3. android 开发edittext获取焦点时hint消失

    默认情况时:设置了hint的话,需要输入的时候hint才会消失,但是现在是需要当edittext获取焦点时就让hint消失 代码如下: verifycode= (EditText)findViewBy ...

  4. HTML弹出窗口

    1.最简单的 <script type="text/javascript"> <!-- window.open("http://cn.bing.com& ...

  5. 解决Maven默认仓库没有的jar下载(二)

    前言: 在 “解决Maven不能下载“oracle.aspectjweaver.com.springsource.net.sf.cglib”jar(http://www.cnblogs.com/wql ...

  6. github 中删除/更名版本库(repository)

    问题描述: github 中版本库创建/删除/更该名称 问题解决:            (1)创建版本库(Repository) 注:        在上图中的+按钮图标指示的是创建版本库的按钮 注 ...

  7. K短路

    K短路 用dijsktra+A*启发式搜索当点v第K次出堆的时候,这时候求得的路径是k短路.A*算法有一个启发式函数f(p)=g(p)+h(p), 即评估函数=当前值+当前位置到终点的最短距离g(p) ...

  8. MoveManager管理类

    MoveManager:移动管理类 struct MoveOpt { int cur_seq; ObjecInfo* obj; }; std::map<ObjID, MoveOpt> m_ ...

  9. Unity3D与iOS的交互设计<ViewController 的跳转>

    原地址:http://www.aichengxu.com/article/%CF%B5%CD%B3%D3%C5%BB%AF/28797_12.html Unity3D与iOS的交互设计<View ...

  10. gulp-css-spriter 雪碧图合成

    一.配置 gulp的雪碧图功能没有grunt那么强大,但是类似功能也支持,功能稍微弱一些,但是也很棒 npm地址:https://www.npmjs.com/package/gulp-css-spri ...