Hibernate自定义主键

          Hibernate自定义主键,通过此方法可以解决一此特殊的主键ID,在了解自定义主键时,先了解下Hibernate自定义主键Hibernate有自带的10种生成主键方法.

1) assigned
主键由外部程序负责生成,无需Hibernate参与。

2) hilo
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。

3) seqhilo
与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。

4) increment
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:如果当前有多个实例访问同一个数据
库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。

5) identity
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制。

6) sequence
采用数据库提供的sequence 机制生成主键。如Oralce 中的Sequence。

7) native
由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。

8) uuid.hex
由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。

9) uuid.string
与uuid.hex 类似,只是生成的主键未进行编码(长度16)。在某些数据库中可能出现问题(如PostgreSQL)。

10) foreign
使用外部表的字段作为主键。一般而言,利用uuid.hex方式生成主键将提供最好的性能和数据库平台适应性。

 

          但是Hibernate自带的标识(OID)生成器不足以满足需求,用户需要定义自己的对象标识生成器。有人会问Hibernate可以自定义主键?答案是肯定的.

         Hibernate(3.0)提供的标识生成器扩展相关接口:org.hibernate.id.IdentifierGenerator和org.hibernate.id.Configurable
         这里我们只介绍接口org.hibernate.id.org.hibernate.id.Configurable ,而org.hibernate.id.Configurable 接口大家可以试试
         首先自己定义一个类,然后实现org.hibernate.id.Configurable接口

public class GeneralSrid implements IdentifierGenerator {


 public Serializable generate(SessionImplementor arg0, Object arg1)
   throws HibernateException {

   return  StrUtil.generalSrid();   // 这里就是自己自定义的主键方法.

 }

         }

然后找到hibernate的XML文件,把上面实现的类写到class属性,这样就完成了自定义主键
        <comment>部门信息</comment>
        <id name="deptid" type="java.lang.String">
            <column name="DEPTID" length="32" />
            <generator class="GeneralSrid" />
        </id>


 

上一篇: ExtJS简单入门实例
下一篇: EXT入门简单的静态树形菜单
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: java hibernate
相关日志:
评论: 22 | 引用: 0 | 查看次数: -
xizi[2010-08-21 11:29 AM | | | 180.130.235.149 | del | 回复回复]
22#
猛兄的东西都很专业啊,不涉及的时候真的是看不懂
李让[2010-08-21 09:41 AM | | | 110.251.0.97 | del | 回复回复]
21#
技术性很强,留下足迹
太阳博客[2010-08-21 06:14 AM | | | 116.3.25.207 | del | 回复回复]
20#
看不懂地来过。
TTkea[2010-08-21 00:56 AM | | | 222.94.69.229 | del | 回复回复]
19#
额,,完全没看懂...
记忆之家[2010-08-20 11:00 PM | | | 124.236.112.98 | del | 回复回复]
18#
Java 的啊,还不会哦
星星之火[2010-08-20 10:45 PM | | | 221.232.12.186 | del | 回复回复]
17#
太专业了,有点高深,什么时候我也能做到啊
小松[2010-08-20 08:51 PM | | | 115.201.21.32 | del | 回复回复]
16#
又是Java啊?不懂~
蛋卷[2010-08-20 08:31 PM | | | 113.120.48.109 | del | 回复回复]
15#
太专业 看不懂
黄河之水[2010-08-20 07:57 PM | | | 119.131.171.93 | del | 回复回复]
14#
抗议我抗议,全看不懂!
落水鱼[2010-08-20 06:09 PM | | | 123.5.81.81 | del | 回复回复]
13#
实话说,我看不懂!
先看看[2010-08-20 06:07 PM | | | 183.38.179.128 | del | 回复回复]
12#
这个好专业啊
hodz.cn[2010-08-20 05:57 PM | | | 222.77.25.204 | del | 回复回复]
11#
太强大了
飞猪[2010-08-20 05:53 PM | | | 183.38.196.230 | del | 回复回复]
10#
嗯。有段时间这里也不可评论
咖啡因[2010-08-20 05:49 PM | | | 124.225.81.28 | del | 回复回复]
9#
说真的,没怎么看明白。
睿智小超人[2010-08-20 05:30 PM | | | 183.0.170.102 | del | 回复回复]
8#
Hibernate用来操纵数据库的?
huangjun[2010-08-20 04:41 PM | | | 221.235.58.204 | del | 回复回复]
7#
今天把一个mssql数据库导入导出,把我烦死了~
izhuna[2010-08-20 04:15 PM | | | 121.20.219.71 | del | 回复回复]
6#
博主的风格做的真漂亮。
卢松松[2010-08-20 02:56 PM | | | 210.192.100.226 | del | 回复回复]
5#
有段时间不能评论了,试试现在行不?
回复来自 liuzm liuzm 回复 [2010-08-20 03:30 PM]
呵呵,上次不是试过一次了?
阅网博客[2010-08-20 12:39 AM | | | 123.15.33.189 | del | 回复回复]
4#
我听说,这个既不是数学、也不是数据库是一个java包呵呵
飞晏[2010-08-20 12:35 AM | | | 123.124.2.5 | del | 回复回复]
地板
刚刚看.NET的NHibernate
末路花未央[2010-08-20 10:30 AM | | | 222.66.202.53 | del | 回复回复]
板凳
太高端,看不懂
学夫子[2010-08-20 09:25 AM | | | 124.162.211.137 | del | 回复回复]
沙发
高级玩意,我对数学感兴趣,对数据也感兴趣,但是对数据库就很头疼了,哈哈
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭