5 回答

TA貢獻1802條經(jīng)驗 獲得超4個贊
native有天生的,本土的,也就是說生來就有的,
那也就是說自動生成,不需要人工來幫忙或者管控的.
而assigned是指指定的,分配的,
如果你不賦予他甚麼東西,那麼他是不能實現(xiàn)的.
需要人工,自己把某個東西賦予給它
所以是assigned
在用Hibernate的時候,當(dāng)有表中的主鍵是庫自動生成的時候?qū)⑹褂胣ative。
<generator class="native"></generator>
而當(dāng)是自己添加的時候則需要改為assigned。
<generator class="assigned"></generator>
否則將會出現(xiàn)異常!
如果建表時,該表主鍵類型是integer,并設(shè)置成auto-increment,用native;該表主鍵類型是string類型的,用uuid.hex

TA貢獻1895條經(jīng)驗 獲得超3個贊
這是用來設(shè)置主鍵生成策略的。
具體策略:
Hibernate的Generator屬性有7種class,本文簡略描述了這7種class的意義和用法。 1、identity:用于MySql數(shù)據(jù)庫。特點:遞增 < id name="id" column="id"> < generator class="identity"/> < /id> 注:對于MySql數(shù)據(jù)庫使用遞增序列時需要在建表時對主鍵指定為auto_increment屬性。 2、sequence:用于Oracle數(shù)據(jù)庫 < id name="id" column="id"> < generator class="sequence"> < param name="sequence">序列名< /param> < /generator> < /id> 3、native:跨數(shù)據(jù)庫時使用,由底層方言產(chǎn)生。 Default.sequence為hibernate_sequence < id name="id" column="id"> < generator class="native"/> < /id> 注:使用native時Hibernate默認(rèn)會去查找Oracle中的hibernate_sequence序列。 如果Oracle中沒有該序列,連Oracle數(shù)據(jù)庫時會報錯。 4、hilo:通過高低位合成id,先建表hi_value,再建列next_value。必須要有初始值。 < id name="id" column="id"> < generator class="hilo"> < param name="table">high_val< /param> < param name="column">nextval< /param> < param name="max_lo">5< /param> < /generator> < /id> 5、sequencehilo:同過高低位合成id,建一個sequence序列,不用建表。 < id name="id" column="id"> < generator class="hilo"> < param name="sequence">high_val_seq< /param> < param name="max_lo">5< /param> < /generator> < /id> 6、assigned:用戶自定義id; < id name="id" column="id"> < generator class="assigned"/> < /id> 7、foreign:用于一對一關(guān)系共享主健時,兩id值一樣。 |

TA貢獻1809條經(jīng)驗 獲得超8個贊
一般id應(yīng)該是唯一的,所以oracle 設(shè)計了序列,你可以在創(chuàng)建某個表時為其創(chuàng)建唯一的序列,此序列按照一定的規(guī)則產(chǎn)生唯一的id,在你添加記錄時自動生成一個唯一的id給那張表。所以hibernate才有這個<generator>來設(shè)置你的oracle數(shù)據(jù)庫表的對應(yīng)的序列啊。
class為別的值時,有其他的屬性啊,表其實可以沒有序列的。
- 5 回答
- 0 關(guān)注
- 608 瀏覽
添加回答
舉報