在Hibernate中实现自己的主键生成器(id Generator)
??????? Hibernate提供了很多内置的Generator,能很好的满足大多数的应用场景。但开发者可以选择提供自己特定的Generator实现,以满足自己的特定需求——如用更有意义的字符串类型的主键代替整型主键。我们考虑假设有一个user表,主键字段的值我更希望看到的是类似于“U1,U2,U3…”这样更有意义的主键,而不是简单的“1,2,3…”。在数据库中存在大量表,并且表之间的关系较为复杂的情况下,使用有意义的字符串类型的主键能使开发者对表之间的关系更一目了然。
??????? 我希望该Generator具有以下功能:
??????? 1、?生成的主键是字符串类型。
??????? 2、?前缀英文字母或单词可以在配置文件中任意设置。
??????? 3、?前缀后面的数字自动增加。
??????? 为了实现上述功能,我查看了一下Hibernate所提供的内置的Generator,其中的“hilo”与我要实现的功能较为接近,只不过它返回的是long,short或int,而不是String。看来可以对它稍加改造,于是查看了它的源代码:org.hibernate.id.TableHiLoGenerator。大家可以自己看一下,我就不帖出来了。根据TableHiLoGenerator,很快就完成了我自己的MyGenerator。代码如下:
<id name="memberid" type="java.lang.String">
<column name="MEMBERID" length="8" />
<generator type="java.lang.String">
<column name="NAME" length="30" not-null="true" />
</property>
</class>
</hibernate-mapping>
却跳出这个错:
2008-08-28 23:47:54,693 ERROR [org.hibernate.id.TableGenerator] - could not read a hi value
java.sql.SQLException: ORA-00942: 表或视图不存在