欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

真是郁闷,Hibernate的Id generator不理解 HibernateTomcatCC++C# 

程序员文章站 2022-05-29 13:14:12
...
:?

正在练习hibernate,将hibernate融入到以前的项目中。
对于<id></id>中的<generator>理解,不过想使用自己定义的格式流水号。头大了啊。真是郁闷,Hibernate的Id generator不理解
            
    
    
        HibernateTomcatCC++C# 

看参考文档中说明有那么多的可选择,我先选择sequence吧。

呵呵,今天看论坛上的"用户自定义ID Generator的例子",有所启发,按照自己的想法实现了,只是奇怪为何这个例子只有代码没有解释说明,摸索了一会,根据JB的提示错误搞定了。

问题关键集中在其类的映射文件上.hbm.xml的<generator>元素中的声明。
         <generator class="com.dsii.hibernate.po.CustomizedIdGenerator">
                <param name="table">uid_table</param>
                <param name="column">next_hi_value_column</param>
                <param name="prefix">C</param>
        </generator>

其中class为自定义的类,访问方式同我们访问普通的类一样,这个CustomizedIdGenerator类应当extends net.sf.hibernate.id.TableGenerator类,专门负责生成想要的ID。
而后<param name="table">uid_table</param>指名使用哪个表来记录下个可用的ID值,所以还需要一个column声明<param name="column">next_hi_value_column</param>,此时要记得生成这个表后,该column的值一定要给个初值,否则报错要你提供一个hi value。<param name="prefix">C</param>顾名思义当然就是前缀了,这样定义后生成的id形式为CX,其中X为数字。

CustomizedIdGenerator类代码请自行看论坛的文章吧。虽然没有完全搞懂,但也实现了我的需要。其实很简单的,就在最后的return处加上自己需要的格式。比如我就实现了CCC00000002342格式,呵呵,还不错嘛。

此处需要注意的是,千万不可以使用Tomcat的连接池,否则自定义id功能的无法使用。最好选择使用hibernate的自带的连接池。

希望根据此方式类推,慢慢掌握generator的做法。