论坛首页 Java企业应用论坛

如何实现自己扩展Hibernate的Id generator?

浏览 21554 次
该帖已经被评为精华帖
作者 正文
   发表时间:2003-12-03  
robbin曾建议,最好是使用Hibernate的Id generator,或者自己扩展之。
我现在的应用必须是id=assigned,自己扩展是不是意味着更改hibernate的源代码?
have any examples about it?
   发表时间:2003-12-03  
使用assigned好像不好,这样会把业务上有意义的东西作为identifier。
0 请登录后投票
   发表时间:2003-12-03  
sayor 写道
使用assigned好像不好,这样会把业务上有意义的东西作为identifier。

Thank you for your good advise.
但是,在我的应用中,尽管id没有任何商业意义,但是,有一定的分配要求:每个表、每个属性、每个对象都要有一个ID,而且ID不是一个单纯的long型,如下:
class ULongLong
{
     long high;
     long low;
}
class Test
{
     Ulonglong id;
     ...
}
0 请登录后投票
   发表时间:2003-12-03  
是的,的确每个表都需要id,但并不需要你在自己的程序里来assign,hibernate提供了多种在insert数据到表单时由hibernate来生产identifier的方法,你可以看看hibernate手册里是怎么说的。
0 请登录后投票
   发表时间:2003-12-03  
根据斑竹的推荐,数据库设计中不应有实际意义的id,但实践中却经常出现有业务意义的id,
如:
create table users (
         user_id     varchar(10),
         user_password varchar(10));

这个表,大多都是使用user_id作为主键,如果不用它做主键,那就要增加一个字段 id 作为字段,而且还要对 user_id 作唯一性索引,似乎会有效率上的损失,不知各位的看法...
0 请登录后投票
   发表时间:2003-12-03  
tomcat 写道
根据斑竹的推荐,数据库设计中不应有实际意义的id,但实践中却经常出现有业务意义的id,
如:
create table users (
         user_id     varchar(10),
         user_password varchar(10));

这个表,大多都是使用user_id作为主键,如果不用它做主键,那就要增加一个字段 id 作为字段,而且还要对 user_id 作唯一性索引,似乎会有效率上的损失,不知各位的看法...


第一,不会有效率损失

第二,在你这种情况下,使用user_id做主键,会非常糟糕!

举一个实际的例子,拿本论坛来说,前不久一个版主要我帮他改他的user_id。但是user表关联了另外3个表,也就是说,实际上user表的主键同时作为其他3个表的外键。假设我用user_id做了主键,那么我修改这个版主的user_id的话,我需要同时修改4个表,修改很多条记录。而由于本论坛使用了无业务意义的id做主键,user_id只是唯一性约束的字段,因此我只需要修改user表这一个记录的user_id值,那么就OK了,所有关于这个版主的信息的4张表都被改好了。
0 请登录后投票
   发表时间:2003-12-03  
ffeliza 写道
robbin曾建议,最好是使用Hibernate的Id generator,或者自己扩展之。
我现在的应用必须是id=assigned,自己扩展是不是意味着更改hibernate的源代码?
have any examples about it?


不需要修改Hibernate源代码,你自己编写一个类 implements net.sf.hibernate.id.IdentifierGenerator就可以了。
0 请登录后投票
   发表时间:2003-12-04  
sayor 写道
是的,的确每个表都需要id,但并不需要你在自己的程序里来assign,hibernate提供了多种在insert数据到表单时由hibernate来生产identifier的方法,你可以看看hibernate手册里是怎么说的。

如果你看一下我前面写的代码,你就会明白我的难处了。
0 请登录后投票
   发表时间:2003-12-04  
对不起没仔细看,如果这样的话的确需要自己写Generator,但你为什么要这样做呢?既然没有业务意义,为什么不用long型呢?应该无所谓这个id是什么型的吧。
0 请登录后投票
   发表时间:2003-12-05  
sayor 写道
对不起没仔细看,如果这样的话的确需要自己写Generator,但你为什么要这样做呢?既然没有业务意义,为什么不用long型呢?应该无所谓这个id是什么型的吧。

hehe,某行业的国际标准。为了适应不同数据库、不同开发语言的需要——我的理解。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics