1. 程式人生 > >Hibernate3自動建表總有一張建立不成功問題及其解決!

Hibernate3自動建表總有一張建立不成功問題及其解決!

所涉物件

四個持久化物件(User、ServicePrudoct、State、Order),四張表(user、service_product、state、order)。

物件間關係

前三者和Order之間均存在一對多(one-to-many)關係,每個的對映檔案中均有一個set配置節;Order和前三者之間均存在多對一(many-to-one)關係,Order的對映檔案中存在三個many-to-one配置節。

問題現象

在struts1.3、sprint2.5、hibernate3.2環境下,user、service_product、state表均成功生成,而order表不能生成,提示以下hql語句存在語法錯誤:

create table order (order_id INT NOT NULL AUTO_INCREMENT , order_date DATE NOT NULL , order_message VARCHAR( 64 ) NOT NULL , order_attachement VARCHAR( 255 ) NOT NULL , user_id INT NOT NULL , service_product_id INT NOT NULL ,  state_id INT NOT NULL , PRIMARY KEY ( order_id))

分析試驗

因為成功生成的表格和其他表格均是獨立表格,相互間沒有關係,最先懷疑,是多對一或一對多配置有問題,但參考若干成功範例發現,沒有什麼錯誤,最後求助於Hibernate3的文件7章“關聯關係對映”,將其“7.4.1 雙向關聯”提供的例項加入同一Project:

7.4.1. 一對多(one to many) / 多對一(many to one)

雙向多對一關聯 是最常見的關聯關係。(這也是標準的父/子關聯關係。)

<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <many-to-one name="address"
        column="addressId"
        not-null="true"/>
</class>
<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
    <set name="people" inverse="true">
        <key column="addressId"/>
        <one-to-many class="Person"/>
    </set>
</class>

沒有發現問題,成功生成了表格。

沒轍,查不出問題來,繼續試驗,想這User等三個物件均和Order物件存在關係,我何不先簡單化,新增一個Article物件,讓它先只和User發生關係,然後再逐個新增另外兩個關係,這樣試驗了一下,發現居然也沒有問題,能成功生成表格。此時,還是沒有想到問題在哪。最後想,那就把原來的Order物件和對映檔案刪除,將Article物件和對映檔案複製一份,修改成Order物件和對映檔案,這樣一改,居然又不行了。此時,發現,只改過名稱,難道是名稱有問題,名稱和mysql的關鍵字衝突?在對映檔案裡,將Order物件的“table = "order"”改為“table = "tbl_orfer"”一試,果然如此。

總結教訓

用Hibernate直接生成資料庫,看起來和sql語句沒關係了,可一樣不能忽視和關鍵字衝突的問題!!!

另外:在表名前面加字首“tbl_”是個好習慣!!!

hbm檔案

User.hbm.xml

 <class name="User" table="user">

  <id name="id" type="java.lang.Integer" column="user_id">
   <generator class="identity"/>
  </id>

  <property name="email" column="email" type="java.lang.String" not-null="true" length="128" unique="true"/>
  <property name="password" column="password" type="java.lang.String" not-null="true" length="64"/>
  <property name="firstName" column="first_name" type="java.lang.String" not-null="true" length="32"/>
  <property name="lastName" column="last_name" type="java.lang.String" not-null="false" length="32"/>
  <property name="phoneNumber" column="phone_number" type="java.lang.String" not-null="true" length="32"/>

  <set name="orders" inverse="true">
   <key column="user_id" />
   <one-to-many class="Order" />
  </set>
 </class>

ServiceProduct.hbm.xml

 <class name="ServiceProduct" table="tbl_service_product">
  <id name="id" type="java.lang.Integer" column="service_product_id">
   <generator class="identity"/>
  </id>

  <property name="serviceProductTitle" column="serviceProductTitle" type="java.lang.String" not-null="false" length="255"/>
  <property name="serviceProductDescription" column="serviceProductDescription" type="java.lang.String" not-null="true" length="1024"/>
  <property name="serviceProductImagePath" column="serviceProductImagePath" type="java.lang.String" not-null="false" length="255"/>
  <property name="serviceProductPrice" column="serviceProductPrice" type="java.lang.Double" not-null="true" length="12"/>

  <set  name="orders" inverse="true">
   <key column="service_product_id" />
   <one-to-many class="Order" />
  </set>

 </class>

State.hbm.xml

 <class name="State" table="tbl_state">
  <id name="id" type="java.lang.Integer" column="state_id">
   <generator class="identity"/>
  </id>

  <property name="stateName" column="state_name" type="java.lang.String" not-null="false" length="32" />
  <property name="stateDescription" column="state_description" type="java.lang.String" not-null="false" length="255" />

  <set name="orders" inverse="true">
   <key column="state_id"/>
   <one-to-many class="Order"/>
  </set>

 </class>

Order.hbm.xml

 <class name="Order" table="tbl_order" >
  <id name="id" type="java.lang.Integer" column="order_id">
   <generator class="identity"/>
  </id>

  <property name="orderDate" column="order_date" type="java.util.Date" not-null="true" length="0"/>
  <property name="orderMessage" column="order_message" type="java.lang.String" not-null="false" length="64"/>
  <property name="orderAttachment" column="order_attachment" type="java.lang.String" not-null="false" length="255"/>

  <many-to-one name="orderUser" column="user_id" not-null="true" lazy="false"/>
  <many-to-one name="orderServiceProduct" column="service_product_id" not-null="true" lazy="false"/>
  <many-to-one name="orderState" column="state_id" not-null="true" lazy="false"/>

 </class>

相關推薦

Hibernate3自動建立成功問題及其解決

所涉物件 四個持久化物件(User、ServicePrudoct、State、Order),四張表(user、service_product、state、order)。 物件間關係 前三者和Order之間均存在一對多(one-to-many)關係,每個的對映檔案中均有一

最火爆10大集成開發環境和代碼編輯器款是最適合你的

.org 如何工作 技術分享 你是 自帶 獲取 數據科學家 識別 文件中 什麽是集成開發環境和代碼編輯器 進群:125240963 即可獲取數十套PDF或者零基礎入門教程一套哦! 保存和重載代碼文件 如果一款集成開發環境或者編輯器不允許你保

Java鏈接HBASE數據庫,創一個,刪除,修改,輸出插入,修改,數據刪除,數據獲取,顯示信息,過濾查詢,分頁查詢,地理hash

can charat nfa true 目錄結構 dfa byte sin extra 準備工作 1、創建Java的Maven項目 創建好的目錄結構如下: 另外註意junit的版本,最好不要太高,最開始筆者使用的junit4.12的,發現運行的時候會報錯。最後把Junit

四款?linux?操作系統款適合你

最新 新版本 搜索 單獨 align 郵件 快速 代號 打開 轉為使用Linux可謂是開啟了一扇新工具和新技術的大門,它使你對計算環境的體驗更為輕松。但是根據你所選擇的Linux操作系統的不同,有時你甚至是瀏覽桌面環境也可能會充滿了挑戰,因此在客觀上還是多少存在著一個學習曲

句英文,能夠溫暖到你

art from 技術分享 ant when my life png people webp I will make you happy when you are depressed. I will make you delighted when you a

Hiberntate自動的問題:hibernate.(*)

寫代碼 dial ddl ber pro nta auto OS div 今天寫代碼的時候發現啟動服務器之後不能自動建表了?wtf什麽鬼?最後發現了這個問題: hbm2ddl.auto前的hibernate.省略之後出的問題,可能是bug之後的版本應該會修復 <pro

第三次 orm自動及遇到的問題

tag ket evaluate jdbc rect clip bstr extra .com Hibernate支持自動建表,在開發階段很方便,可以保證hbm與數據庫表結構的自動同步。 方法很簡單,在hibernate.cfg.xml內加入 <property na

hibernate自動:MySQLSyntaxErrorException: Table '' doesn't exist

mysql mysql5 nat nta exist ble property cep exception 修改前: <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect<

[收藏]天會用上的PDF合並及PDF拆分方法

效率 選擇 www png title 介紹 頂部菜單欄 mage edi 日常的工作中,許多PDF文件都需要按章節和部分來拆分,又有一些內容相近的PDF文件需要合並,這就避免不了要用到PDF合並及PDF拆分這兩大功能。今天給大家介紹一下用PDF編輯器實現PDF合並及PDF

配置資料庫方言為MySQLInnoDBDialect之後自動

配置了資料庫方言為MySQLInnoDBDialect之後不能自動建表 dev環境配置為MySQLInnoDBDialect,程式釋出到dev環境沒問題。dev的庫為mariadb5.5.33a。 後來dev資料庫遷移,順便把資料庫版本升級到了mariadb10.0,發

《惢客創業日記》2018.09.13(週四) 讓每一個銷售員都“惢客名片”

  今天收穫非常大,跟一個朋友聊了一個多小時惢客,除了《惢客》的校驗草稿被掃走,還要預定10月份在喜馬拉雅FM上線的《惢客創業日記》,通過這次與朋友的溝通,讓我有了五個收穫:   第一、他對惢客這個專案的認同和認可,使我又一次充滿了信心。記得,一年前我給他打電話聊惢客時,他還聽的雲裡霧裡。

收藏:近期已上線或即將上線的熱門手遊盤點,射擊魔幻角色扮演?款適合你

最近哪些手遊比較好玩?近期有不少遊戲上線或者即將上線,給大家推薦一些比較好玩的。有你喜歡的嗎? 1、流星蝴蝶劍(已上線) 8月21日上線的網易大型號稱真硬核動作手遊流星蝴蝶劍上線了,iOS首發便登頂下載榜。一提到網易,想到的就是RPG,從最早的“夢幻西遊”、“倩女幽魂”,到最近的“楚留香”等

投資中的 N 種認知偏差,款打敗你

作者:石川,量信投資創始合夥人,清華大學學士、碩士,麻省理工學院博士;精通各種概率模型和統計方法,擅長不確定性隨機系統的建模及優化。已獲授權轉載 摘要:本文介紹投資中常見的 12 個認知偏差。無論是主觀還是量化投資,交易者都應通過不斷努力和科學方法去克服它們、規避它們造成的危害。 引言:有日

10款流行的Markdown編輯器,款適合你

摘要:作為一個開源人,如果你不會使用Markdown語法,那你就OUT了!Markdown 是 2004 年由 John Gruberis 設計和開發的純文字格式的語法,非常的簡單實用。 作為一個開源人,如果你不會使用Markdown語法,那你就OUT了!Markdown 是 2004 年由 John Gr

根據更新另外

#需要更新的表 select distinct owner,table_name from dba_tab_columns t where (t.COLUMN_NAME like '%ACCT_ID%' ) and owner in('COMM'); #根據

本週值得讀 | ACL2017 對話系統 GAN 篇適合你

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

springdata jpa自動

application.properties檔案內容為: spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/demo?characte

20款有效提高工作效率的web前端開發工具推薦,款適合你

Rendera 如果你希望有個環境可以測試、瀏覽和體驗各種不同的 CSS/HTML 和 JavaScript 程式碼,Rendera 為你提供了實時的執行結果。類似RunJS。 Patternizer 從名字可看出該工具可以建立真正的調色盤,包括各種線條和條文,可編輯線寬、顏色、角

種正能量觸動你的心靈,讀劉丁寧的封信

劉丁寧,女,2013年和2014年兩屆 遼寧省高考文科 狀元。 2013年高考,劉丁寧考出了668(含加分10分)分,為遼寧高考文科狀元。被香港大學以全額獎學金錄取。2013年10月,劉丁寧離開香港大學重回母校(

hibernate通過pojo自動操作

1. 多對一 如球員和球隊的關係:多個球員在同一個球隊中。 1.1 類圖 TeamPojo:屬性 + set/get public class TeamPojo{ private Integer teamId; private String teamName; private String team