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









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














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