读书人

重拾hibernate自定义部类

发布时间: 2012-09-18 16:21:42 作者: rapoo

重拾hibernate——自定义类型

从去年2月参加实习到现在已经差不多一年半没有碰三大框架啦,面对这三个庞然大物,看着真的有点心虚,要学通还真是要花不少的时间,但再困难也还是要去学习的,还是老老实实一步步走。

最近下了一本夏昕的《深入浅出hibernate》,不得不说这是一本好书,是国内难得的一本技术书。它不仅介绍了hibernate的用法,还讲解了基本的实现原理,一步步深入。

开始重新学习hibernate啦,希望和我一样公司没有用三大框架的也自己学习一下,毕竟这三大框架的设计思想是非常好的。

基本的这里就不多讲了,最近看到hibernate的自定义类型,这个以前没接触过,在这里记录一下,当是对自己知识的巩固,也让没有接触过的朋友一起学习研究一番。

1)自定义类型,顾名思义,当然就是由于内部的类型不满足需求,而自己来进行实现的类型。这种情况不多,但我们还是有必要学习一下,技多不压身嘛。也学习一下,别人在做框架的时候是怎么去考虑的,怎么去思考扩展性的。

自定义类型有两个方法来实现,一种是实现UserType,另外一种实现CompositeUserType,另外可能还有一些方法,但我暂时没用到,先不讲了。

我暂时只用到UserType,我们就先看一下UserType接口的定义:

?类中实现的方法是需要修改的方法,其他不需要修改暂时不用的方法则没有写出来,但还是需要实现的。

3)接下来就是User类的映射文件:

?相信大家都知道怎么进行修改,这里也不进行讲解了,主要是修改emails的type,修改为我们刚才定义的EmailList类。

4)最后我们来写一个测试类:

?而当我们只保存一个时,异常如下:

X:[[12312@sfsdf.com, 123@123.com]]Y:[12312@sfsdf.com, 123@123.com]

这样的结果却是很奇怪的。网上并没有讲到为什么会出现这种情况。这里提出一下:我用的hibernate版本是Hibernate 3.3.2.GA。不知道是版本问题还是其他问题,我们明天再研究一下。如果有哪位兄弟知道为什么的,希望也不吝告诉我一下。

今天的研究就到这里,希望大家可以知道基本的实现自定义类型的方法。

读书人网 >软件架构设计

热点推荐