hibernate自定義主鍵策略,
最近項目中使用hibernate的guid生成策略,配置如下:
<id name="id" type="java.lang.String">
<column name="ID" length="32" />
<generator class="guid" />
</id>
發現生成的id很有規律,一看源碼原來hibernate的guid底層使用采用數據庫底層的guid算法機制,對應MYSQL的uuid()函數,SQL
Server的newid()函數,ORACLE的rawtohex(sys_guid())函數等。
具體oracle使用的是(select rawtohex(sys_guid()) from dual)
使用下面的pl/sql測試:









結果:
A36190EE69DDAAE7E040200A8A096CE5
A36190EE69DEAAE7E040200A8A096CE5
A36190EE69DFAAE7E040200A8A096CE5
A36190EE69E0AAE7E040200A8A096CE5
A36190EE69E1AAE7E040200A8A096CE5
A36190EE69E2AAE7E040200A8A096CE5
A36190EE69E3AAE7E040200A8A096CE5
A36190EE69E4AAE7E040200A8A096CE5
A36190EE69E5AAE7E040200A8A096CE5
A36190EE69E6AAE7E040200A8A096CE5
A36190EE69E7AAE7E040200A8A096CE5
只有中間一個字符不同。
下面采用hibernate自定id策略接口IdentifierGenerator
我們簡單起見使用jdk自帶的uuid方法:














然后在配置的時候用如下配置即可:
<id name="id" type="java.lang.String">
<column name="ID" length="32" />
<generator class="com.XXX.XXX.UUIDGenerator" />
</id>
~完~