首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate中的Collection小路

2012-08-27 
Hibernate中的Collection小谈记得我们在以前例子中一对多中用到的Set,还有印象么,如果没有赶快去查一下资

Hibernate中的Collection小谈

记得我们在以前例子中一对多中用到的Set,还有印象么,如果没有赶快去查一下资料,回顾一下。今天我们就围绕着这些Collection来进行学习。

还是不废话了,我们直接进入正题。

1)首先我们来学习一下Set。大家都知道JAVA util包里面也有一个Set,那么hibernate里面的set和java的set和什么区别和联系呢?我们打开hibernate的API,找到Set,可以看到。

Hibernate中的Collection小路

这个Collection是什么东西呢?我们再进去看:

Hibernate中的Collection小路

我们看到的就是这样一个hibernate的集合的父类,它是一个抽象类,有一系列具体的实现类,我们继续看到下面的方法时,发现这个类实现上是对java集合的封装,这样我们就明白啦,所谓的hibernate的Set实际上也只是封装了java的Set。

那么,Set中不允许重复元素的这个特点是否也在hibernate中呢?答案当然是肯定啦。

我们这里不看这些,我们以前在学习映射时是直接把属性和所关联的类进行关联,但今天我们不这样啦,我们用另外一种方法,只是关联一个字符串,看看有什么问题。

但在看这个问题前,我们先来看看,java中的String比较。

?接下来是Address的映射文件:

?童鞋们看清楚了,我在TUser中的Set里面把one-to-many注释了而用了element,这里先不管它有什么问题,我们先看数据库:

这是t_address表:

Hibernate中的Collection小路

下面是t_user表:

Hibernate中的Collection小路

我们可以看到id为4的User对应了三个地址,接下来,我们来看一下测试方法:

?并且相应的实体类需要把addresses的类型修改为List类型。

这里我们重新添加三个地址:

Hibernate中的Collection小路

我们运行测试代码:

?我们看到它只比bag多了一个collection-id进行表明要删除的记录号。

当我们重新运行删除的代码:

?我们已经把第一条记录给删了,正确了。

?

3)看了上面两种方法,我们再来看一下MAP,它跟上面两个最大的不同就是可以进行键值的对应。直接看代码,直观点:

首先,我们需要修改配置文件:

?它和前面两个最大的不同就是有一个index,这相当于我们在java中map的key,我们通过这个来取出相对应的记录。记住,改完这里还要改相应的实体类,需要把addresses属性的类型改成Map。

看看数据库的数据:

Hibernate中的Collection小路

这里我们看到有两个office和一个home,那么office是拿哪个呢?

不要急,我们运行一下测试代码就知道了:

?它和Map的配置差不多,但index的属性是不一样的,Map中的index是作为key来取得值,而List的index是作为排序的。

我们看数据库:

Hibernate中的Collection小路

我们设了三个值,顺序分别为0,1,2。

下面我们运行代码来更改0,2的值:

??我们看到,0,2已经调换了,当然这也只是调换了idx的值。但这已经基本上实现了排序的功能了。

?

热点排行