hibernate映射文件詳解

堅持每天寫博文,積累下開發中的點點滴滴

  • 思考:hibernate什麼時候會調set方法什麼時候會調get方法?
    保存時需要傳入數據的時候會調用get方法來獲取字段值,查詢出數據以後裝回到domain對象時使用。
  • hibernate不需要考慮get/set方法的可見性
    即,hibernate能夠調用私有的set/get方法

  • <hibernate-mapping>中有一個package屬性,用來定義domain的包

  <hibernate-mapping package="text">
  <class name="User" table="user">
  等價於
   <hibernate-mapping>
  <class name="text.User" table="user">
  注意兩行都寫全包名也不會報錯,因爲hibernate會先找 <class name="text.User" table="user">中驗證,如果沒有再添加 <hibernate-mapping package="text">
  但是不能直接在包裏寫完全,即<hibernate-mapping package="text.User">是錯誤的

 - <property name="user_name" column="user_name"/>裏的type不需要配,並且name屬性需要避免作爲數據庫的關鍵字,否則數據庫不能建表。

  • 關於日期格式,默認是年月日時分秒,可以設置屬性來格式化
//默認是年月日時分秒,一般來說只有日期會配置type
 <property name="dateText" type="date"/>//年月日
 <property name="dateText" type="time"/>//時分秒
  • hibernate映射文件默認包含所有字段,比如我在使用保存方法時,即使某個屬性是空,sql語句也會包含這個屬性。如果我想要某個屬性不被包含,可以配一個屬性
//inset屬性默認是true,false爲不包含(保存操作)
//update屬性默認是truefalse爲不包含(修改操作)
//inset很少用,update對那些意境填寫不得修改的屬性(如創建時間,身份證等)
<property name="user_name" column="user_name" inset="false" update="false"/>
  • 問題

:不同包裏面有兩個同名的domain對象,映射文件編譯報錯,此時應該修改其中一個auto-import=”false”<hibernate-mapping package="text" auto-import="false">

  • 注意:此時我寫sql進行查詢:
 `String hql = "SELECT o FROM User o";
        Query query = session.createQuery(hql);
        System.out.println(query.list());`

此時查詢的是auto-import=”true”對應的User,此時應該使用全類名:

String hql = "SELECT o FROM text.User o";

除了這樣直接寫全類名,也可以在映射文件中給此類設置一個別名,然後查詢別名。
映射文件:

<hibernate-mapping package="text" auto-import="false">
 <import class="text.User" rename="User2"/>

sql:String hql = "SELECT o FROM User2 o";

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