注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 可扩展、高可用、负载均衡..
 帮助

hibernate怎样改变主键值?


2007-06-25 11:57:14
 标签:hibernate 主键值   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://sunny.blog.51cto.com/182601/31605
    前些天我的同事遇到了一个问题:数据库使用的是oracle ,持久层方面使用的是hibernate3 ,数据库中的有一张表的主键使用的是前缀字符 + 序列。这个问题就复杂了,也就是说我们每个对象的主键值都不是纯数字。那么hibernate怎样将这个主键写入数据库呢。
    查了一些资料,也没有找到适合的解决办法,后来请教好友苏强终于解决问题了。呵呵,我想也许很多人都遇到过类似的问题,我就把它写出来了。方便大家参考,或有不同意见的朋友们讨论一下,具体的解决办法是:
    1:<id name="userid" type="java.lang.String">
            <column name="USERID" length="20" />
            <generator class="cn.utils.MyGenarator">
                <param name="sequence">s_userid</param>
            </generator>
          </id>
        首先,要改的是hbm的配置文件,在第三行的地方写一个类,这个类将来会用于处理序列的问题,包括路径一定不要配错,第四行中的参数sequence的属性的值不要配错,就是你在数据库中的序列名字。
  
  2:上面的问题改完了,接下来我们要来写这个类了。类的名字和路径不要写错,这个类要继承SequenceGenerator 。
        public class MyKeyGenarator extends SequenceGenerator {
 public Serializable generate(SessionImplementor session, Object obj) throws HibernateException {
  Serializable result = super.generate(session,obj);
  
  return "hello" + result + "haha";
 }
}
      程序中的result就是你返回来的序列,然后你可以对这个序列前后加任何的字符串了,随你了。呵呵呵!

本文出自 “我的博客开张了” 博客,请务必保留此出处http://sunny.blog.51cto.com/182601/31605





    文章评论
 
2007-06-25 23:06:35
是个不错的解决办法,可以值得参考的

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: