Oracle中關於schema="workName"的問題及解決辦法

在做ssh項目的時候,導入數據庫文件。運行程序出現錯誤,表或者視圖找不到,還報空針異常等等。找原因的時候發現數據庫裏有需要的表程序卻找不到這個表。
原因:項目的數據庫映射文件xxxx.hbm.xml中寫有schema=”workName”
而我自己又重建創建了一個用戶utdp,導致程序在查找的時候沒有找到相對應的數據表

解決方法:創建一個用戶名爲workName的用戶,重新導入數據庫的數據。

<hibernate-mapping>
    <class name="com.sinosoft.utdp.model.UserApp" table="UTDP_USER_APP" schema="UTDP">
        <property name="uaLoginname" type="java.lang.String">
            <column name="UA_LOGINNAME" length="50" />
        </property>
        <property name="uaLoginpwd" type="java.lang.String">
            <column name="UA_LOGINPWD" length="50" />
        </property>
    </class>
</hibernate-mapping>

就是說一個用戶一般對應一個schema,該用戶的schema名等於用戶名,並作爲該用戶缺省schema。這也就是我們看到schema名都爲數據庫用戶名的原因。

Oracle數據庫中不能新創建一個schema,要想創建一個schema,只能通過創建一個用戶的方法解決,在創建一個用戶的同時爲這個用戶創建一個與用戶名同名的schem並作爲該用戶的缺省shcema。即schema的個數同user的個數相同,而且schema名字同user名字一一 對應並且相同

一個用戶有一個缺省的schema,其schema名就等於用戶名,當然一個用戶還可以使用其他的schema。如果我們訪問一個表時,沒有指明該表屬於哪一個schema中的,系統就會自動給我們在表上加上缺省的sheman名。比如我們在訪問數據庫時,訪問scott用戶下的emp表,通過select * from emp; 其實,這sql語句的完整寫法爲select * from scott.emp。在數據庫中一個對象的完整名稱爲schema.object,而不屬user.object。類似如果我們在創建對象時不指定該對象的schema,在該對象的schema爲用戶的缺省schema。

也就是說在創建數據映射初期,可以加上schema ,之後就可以把他給刪除掉就行了,程序運行的時候就自動給加上缺省的schema。

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