Hibernate映射集合属性
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-6 hibernate映射集合属性
1.集合类框架 以Tree开头都是按顺序,默认情况下是升序排列. 以Linked 开头的都是按插入顺序排列的. 2.在hibernate中要持久化集合属性时必须将其声明为接口,如 private Se ...
- (转)Hibernate框架基础——映射集合属性
http://blog.csdn.net/yerenyuan_pku/article/details/52745486 集合映射 集合属性大致有两种: 单纯的集合属性,如像List.Set或数组等集合 ...
- Hibernate映射Map属性
看到一篇Hibernate 映射Map属性的文章挺好的转载一下原地址:http://blog.sina.com.cn/s/blog_86f4502c0101fs1x.html Map集合属于有序集合, ...
- hibernate学习系列-----(9)hibernate对集合属性的操作之Map集合篇
照旧,先新建一个StudentMap.java实体类,将hobby属性使用map集合接口来存放: package com.joe.entity; import java.util.Map; publi ...
- hibernate学习系列-----(8)hibernate对集合属性的操作之Collectioon集合篇
度过短暂的周末,又到了周一,继续轻松而愉快的学习,紧承以前的学习,继续了解hibernate对集合的操作学习之旅! 在上一篇中,就已经提前说过,这一篇的内容以及下一篇的内容会有很多相似之处,这里就不再 ...
- hibernate学习系列-----(7)hibernate对集合属性的操作之List集合篇
今天要写的内容其实不多,本打算将hibernate对集合的操作的内容直接归结为一篇的,但想一想,还是分开写的比较好,毕竟前面的已经发布出去来了,废话不多说,开始吧! 依旧新建一个StudentList ...
- hibernate学习系列-----(6)hibernate对集合属性的操作之Set集合篇
先说一段废话吧,本打算每天把所学的知识总结为博客的,但是昨天为什么没有写呢?没有学习吗?No,那是为什么?贪玩,对,这位同学说对了,老实说昨天感觉身体不怎么舒服,大家都知道,这其实就是为自己懒找借口, ...
- Hibernate映射Map属性2
Hibernate在映射Map属性时生成映射文件.需要注意的一些地方.下面是我的一个例子. Java类如下 public class NameAndNumber { private Integer i ...
- Hibernate对集合属性的操作---基础学习
1:Set集合属性操作 1).Hibernate3以后支持大部分重要的JDK集合接口映射,Set集合接口的配置: >在xxx.hbm.xml文件中使用<set>标签 2).< ...
随机推荐
- iOS开发 适配iOS10以及Xcode8-b
现在在苹果的官网上,我们已经可以下载到Xcode8的GM版本了,加上9.14日凌晨,苹果就要正式推出iOS10系统的推送了,在此之际,iOS10的适配已经迫在眉睫啦,不知道Xcode8 beat版本, ...
- Careercup - Facebook面试题 - 4922014007558144
2014-05-01 02:13 题目链接 原题: Design question: Say you have hacked in to a network and can deploy your b ...
- Django 学习笔记之一 环境搭建
以后的文章都是在windows系统进行的 首先下载安装Django包 方式1:使用 pip或easy_insatll来进行安装 同时按住win+R键,弹出命令行运行框输入,pip install Dj ...
- Matlab中sort函数的使用
主要看大神们如何使用,先模仿. [~,y] = sort(v),如果v是向量,那么y返回的是v中的下标(不好表达),看下面的,发现y是是下标,对应的是c中元素*(由小到大排序).使用c(y)就得到了由 ...
- Java基于Socket文件传输示例(转)
最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步的了解.在一位网友提供的程序基础上,俺进行了一些加工,采用了缓冲输入/输出流来包装输出流,再采用数据输入/输出输出流进行包装,加 ...
- PHP 打印函数之 print print_r
print 说明 int print ( string $arg ) 输出 arg print 实际上不是一个函数(它是一个语言结构),因此你可以不必使用圆括号来括起它的参数列表 参数 arg:输入数 ...
- DataGrid行详细信息的绑定--DataGrid.RowDetailsTe(转载)
在Silverlight中的DataGrid控件使用中我们想点击其中一行并且看这一行的详细信息应该如何做呢?而且这个详细信息是多行的数据,而非简单的几个属性. 在这里我们使用DataGrid.RowD ...
- Ubuntu 启动栏添加eclipse图标
sudo gedit /usr/share/applications/eclipse.desktop [Desktop Entry] Name=Eclipse Comment=c project ma ...
- 一起学Maven
转载自:http://blog.csdn.net/songdeitao/article/details/18452459 一. 初识Maven 开场白 在现在的项目开发过程中,越来越重视项目的管理,而 ...
- Unix编程之size_t、ssize_t
http://blog.csdn.net/lalor/article/details/7426184 首先,我非常肯定以 及确定的告诉你ssize_t是有符号整型,在32位机器上等同与int,在64位 ...