对于<id></id>中的<generator>理解,想使用自己定义的格式流水号。怎么解决??
看参考文档中说明有那么多的可选择,我先选择sequence吧。
看了论坛上的"用户自定义ID Generator的例子",有所启发,按照自己的想法实现了。问题关键集中在其类的映射文件上.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的做法。