關於使用hibernate註解總結

來源:互聯網
上載者:User

標籤:運算式   ansi   str   cascade   注釋   getc   hashset   string   唯讀   

首先,我們先瞭解一下什麼是hibernate註解:

  Hibernate提供了Hibernate Annotations擴充包,它可以替代複雜的*hbm.xml,從而使得hibernate程式的開發大大簡化。

  帶註解的持久類也是普通POJO,它們只是具備了持久性註解的普通POJO

  事實上,使用註解時我們可以保持欄位的持久性(註解寫在成員變數上) 也可以保持屬性(註解寫在getter方法上)的持久性。

 

接下來,我們看一下hibernate常用的註解有哪些以及如何使用

@Entity——注釋聲明該類為持久類。將一個javabean類聲明為一個實體的資料庫表映射類,最好實現序列化

      此時,預設情況下,所有的類屬性都為映射到資料表的持久性欄位.若在類中,添加另外屬性,而非映射來資料庫的, 要用下面的Transient來註解.

 

@Table(name="student",schema="mytest")——持久性映射的表(name=“student”) @Table是類一級的註解

@Table定義在@Entity下,為實體bean映射表,預設為實體類名,不用帶包名

 

@Id——注釋可以表中的主鍵

@GeneratedValue(strategy=GenerationType.IDENTITY)——定義自動成長的主鍵的建置原則.

Hibernate 能夠出色地自動產生主鍵。Hibernate/EBJ 3 注釋也可以為主鍵的自動產生提供豐富的支援,允許實現各種策略。
其建置規則由@GeneratedValue設定的.

JPA提供的四種標準用法為TABLE,SEQUENCE,IDENTITY,AUTO.
TABLE:使用一個特定的資料庫表格來儲存主鍵。
SEQUENCE:根據底層資料庫的序列來產生主鍵,條件是資料庫支援序列。
IDENTITY:主鍵由資料庫自動產生(主要是自動成長型)
AUTO:主鍵由程式控制。

在指定主鍵時,如果不指定主鍵建置原則,預設為AUTO。

@Id

 

相當於

 

@Id
@GeneratedValue(strategy = GenerationType.AUTO) @Transient——將忽略這些欄位和屬性,不用持久化到資料庫中,適用於在持久化類中某些屬性不屬於映射到的資料表,而是其他的  @Enumerated——聲明枚舉  @Version——聲明對樂觀鎖的支援  @OneToOne——可以建立實體bean之間的一對一的關聯
@OneToMany——可以建立實體bean之間的一對多的關聯
@ManyToOne——可以建立實體bean之間的多對一的關聯
@ManyToMany——可以建立實體bean之間的多對多的關聯
@Formula——一個SQL運算式,這種屬性是唯讀,不在資料庫產生屬性(可以使用sum、average、max等)
@OrderBy——Many端某個欄位排序(List) 下面貼上自己寫的一個測試實體類代碼
package com.zwk;import javax.persistence.*;@Entity@Table(name = "student", schema = "mytest")public class StudentEntity {    private int sid;    private String sname;    private String sex;    private GradeEntity grade;    public  StudentEntity(){    }    //gid是外鍵  與grade表的主鍵關聯,表示可以多個學生屬於一個班級    @ManyToOne              //指定多對一關聯性映射    @JoinColumn(name="gid")   //指定對應的列    public GradeEntity getGrade() {        return grade;    }    public void setGrade(GradeEntity grade) {        this.grade = grade;    }    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    @Column(name = "sid")    public int getSid() {        return sid;    }    public void setSid(int sid) {        this.sid = sid;    }    @Basic    @Column(name = "sname")    public String getSname() {        return sname;    }    public void setSname(String sname) {        this.sname = sname;    }    @Basic    @Column(name = "sex")    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    @Override    public boolean equals(Object o) {        if (this == o) return true;        if (o == null || getClass() != o.getClass()) return false;        StudentEntity that = (StudentEntity) o;        if (sid != that.sid) return false;        if (sname != null ? !sname.equals(that.sname) : that.sname != null) return false;        if (sex != null ? !sex.equals(that.sex) : that.sex != null) return false;        return true;    }    @Override    public int hashCode() {        int result = sid;        result = 31 * result + (sname != null ? sname.hashCode() : 0);        result = 31 * result + (sex != null ? sex.hashCode() : 0);        return result;    }}
package com.zwk;import org.hibernate.annotations.Cascade;import javax.persistence.*;import java.util.HashSet;import java.util.Set;@Entity@Table(name = "grade", schema = "mytest")public class GradeEntity {    private int gid;    private String gname;    private String gdesc;    private Set<StudentEntity> students=new HashSet<StudentEntity>();    public GradeEntity(){    }    @OneToMany//指定一對多關聯性    @Cascade(value = {org.hibernate.annotations.CascadeType.SAVE_UPDATE})//設定級聯關係    @JoinColumn(name="gid")    public Set<StudentEntity> getStudents() {        return students;    }    public void setStudents(Set<StudentEntity> students) {        this.students = students;    }    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    @Column(name = "gid")    public int getGid() {        return gid;    }    public void setGid(int gid) {        this.gid = gid;    }    @Basic    @Column(name = "gname")    public String getGname() {        return gname;    }    public void setGname(String gname) {        this.gname = gname;    }    @Basic    @Column(name = "gdesc")    public String getGdesc() {        return gdesc;    }    public void setGdesc(String gdesc) {        this.gdesc = gdesc;    }    @Override    public boolean equals(Object o) {        if (this == o) return true;        if (o == null || getClass() != o.getClass()) return false;        GradeEntity that = (GradeEntity) o;        if (gid != that.gid) return false;        if (gname != null ? !gname.equals(that.gname) : that.gname != null) return false;        if (gdesc != null ? !gdesc.equals(that.gdesc) : that.gdesc != null) return false;        return true;    }    @Override    public int hashCode() {        int result = gid;        result = 31 * result + (gname != null ? gname.hashCode() : 0);        result = 31 * result + (gdesc != null ? gdesc.hashCode() : 0);        return result;    }}

 

 

關於使用hibernate註解總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.