hibernate中annotation方式SchemaExport無法生成表的原因(ORA-02261)

主要原因分析如下:

1.ID的註解中,= "ID", nullable = false, unique = true, insertable = true, precision = 22, scale = 0)註解中絕對不能出現 unique = true 這個屬性

記得:一定要移除unique = true

2.表名可能是Oracle數據庫的關鍵字,比如表名是user,order,這時候建議給表名加前綴,比如:t_user,t_order

3. hibernate.cfg.xml 中一定要配置如下信息(非常關鍵,全靠這個配置才能生產表結構):

<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>

4. 記得把PoJO添加到 hibernate.cfg.xml 中

<mapping class="com.dvn.li.hiberUse.model.Customer" />
<mapping class="com.dvn.li.hiberUse.model.Order" />

5.Annotation要使用AnnotationConfiguration,XML的格式是使用Configuration的

demo如下:

SchemaExport export = new SchemaExport(new AnnotationConfiguration()
     .configure());
export.create(true, true);

備註:

第一種情況是最難查找出來的,一旦使用了unique = true,程序可以正常的執行倒出表的語句,並且後臺打印了SQL語句,可是數據庫就是沒有,無論怎麼刷新也沒有;

這時候把SQL複製到數據庫中執行,反而會提示:

ORA-02261: 表中已存在這樣的唯一關鍵字或主鍵

崩潰吧!

移除ID設置中的unique = true就搞定啦!

------------------------------------------------------------------------------

其實在項目的開發中,使用SchemaExport產生數據庫表結構基本很少,因爲數據庫都是在項目Coding前定義好的;

1.Hibernate的SchemaExport接口的主要作用是測試使用;

2.如果你從網上下載了一個工程,但是沒有提供建表語句,OK,它就是不錯的選擇,自動生成表結構!

3.如果希望改變數據庫,重新生成數據庫表,OK,SchemaExport也可以;比如項目工程用oracle數據,但是在家裏調試時候沒有安裝Oracle數據庫,只有MySql數據庫,這時候只要修改了hibernate.cfg.xml 的數據庫連接地址,用戶名,密碼,驅動,方言,就可以再生產對應新的數據庫的表結構;--------但是,代碼卻需要一定的改動,因爲如果沒有采用HQL語句,hibernate是做不到跨數據庫滴,比如代碼中sql使用了oracle的專有函數,在mysql中就無法運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章