Hibernate遇到oracle之主鍵建置原則

來源:互聯網
上載者:User

標籤:多表   --   with   策略   span   運行   計數   cycle   操作   

一直用Hibernate+mysql,感覺Hibernate很好用,也出過什麼大問題;這周,公司的產品要部署到Orecle,雖然產品號稱支援Oracle但是我自己知道,這個產品壓根兒就沒在Oracle上測試過,更不要是使用了。於是就開始緊羅密布的測試了,問題自然一大堆,現在說一個關於主鍵建置原則的問題。

首先,眾所周知,Hibernate可以自動建表。當我們把項目部署好,啟動並執行時候發現,確實自動建表了,但是少了很多表,就是有的表產生了,有的表木有產生,這就讓人很頭疼了。一波操作之後,發現Hibernate設定檔中,主鍵生產策略有誤,下面就給大家總結一下當Hibernate遇到oracle之後,主鍵建置原則變化。


首先在非叢集情況下:
可以使用hibernate內建的increment策略產生主鍵 ,但是increment 實現機製為在當前應用執行個體中維持一個變數,以儲存著當前的最大值,之後每次需要產生主鍵的時候將此值加1作為主鍵。從根本來講,主鍵是在Java虛擬機器上產生而不是資料庫產生的,所以increment絕不能在叢集環境下使用。

因此在叢集情況下:
就必須使用sequence策略。如果採用sequence策略,就必須在oracle資料庫裡面創建序列:

CREATE SEQUENCE emp_sequence  --序列名
INCREMENT BY 1     -- 每次加幾個  
START WITH 1        -- 從1開始計數  
NOMAXVALUE          -- 不設定最大值  
NOCYCLE               -- 一直累加,不迴圈  
CACHE 10;

 

當然有的朋友還比較喜歡native這個策略,萬金油嘛;但是要注意了在資料庫是Oracle的時候,如果不懂native的機制,那就麻煩了。怎麼回事呢?如果使用native策略,那麼hibernate會自動調用hibernate_sequence這個序列;如果沒有,那自然就出問題了。所以還是在oracle資料庫要建立一個名為hibernate_sequence的序列。有人以為反正也要建立sequence為毛要用native啊?不過對於產品化的東西,可能用於多種資料庫的東西還是有一定使用性的,就不用到每次部署的時候先去改hibernate的設定檔了嘛。

 

好了基本就這樣吧,祝你好運。

 

Hibernate遇到oracle之主鍵建置原則

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.