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