《Hibernate學習筆記二》:表與實體類的映射方法

Hibernate學習筆記二:表與實體類的映射方法

在使用Hibernate 中,我們最好儘量使得實體類的名字與表的名字 、實體類的屬性名與表的列名儘量相同,這樣可以省去很多的麻煩 。但是,在我們的實際項目中,可能會遇到實體類的名字與表的名字不一致 的情況 。

當遇到這樣情況,我們應該怎麼辦呢??

如果我們使用的是Annotation 
,則比較好辦。

看實際例子,如下:

package com.hibernate.model;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;

    @Entity
    @Table(name="_Teacher")  //當表名不一致時,可以這樣指定
    public class Teacher {
    private int id;
    private String name;
    private String title;
    @Id
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    @Column(name="_name")  //當實體類的屬性名與表中的列名不一致時,可以這樣指定,其中 (_name)爲表 的列名。 
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

即當實體類的名字與表的名字不一致時,直接用@table(name=”tableName”)來進行指定即可。

如果實體類的屬性名與表的列名不一致時 ,直接用@Column(name=”columnName”)來進行指定即可。

如果我們使用的是.xml映射文件,則方法如下:

<class name="Student" table="_Student"> <!-- 如果我們不寫table,則默認表名與類名一致 -->
    <!-- 主鍵 -->
    <id name="id" column="id">
        <!-- 主鍵的生成策略 -->
        <generator class="native"/>
    </id>
    <!-- 其他屬性,name對應實體類的屬性,column對應關係型數據庫表的列 -->
    <property name="name"  column="_name"/>
    <property name="age"/>
</class>

以上就是兩種方法來解決實體類的名字和表中的名字不一致的方法。

如果我們不想實體類中的某屬性持久化,應該怎麼辦呢?? 
解決方法就是:在Annotation中直接在該屬性的get方法上添加@transient即可。在.xml文件中直接不寫就好

例如,下面的例子就是將Teacher 類中的title不進行持久化。注意:title的getTitle方法上面添加的註解@transient

package com.hibernate.model;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import javax.persistence.Transient;
    @Entity
    @Table(name="_Teacher")  //當表名不一致時,可以這樣指定
    public class Teacher {
    private int id;
    private String name;
    private String title;
    @Id
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    @Column(name="_name")  //當實體類的屬性名與表中的列名不一致時,可以這樣指定,其中 (_name)爲表 的列名。 
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Transient    //不進行 持久化 
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }

} from: http://blog.csdn.net/u010412719/article/details/51264341

發佈了8 篇原創文章 · 獲贊 9 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章