1. 程式人生 > >關於使用hibernate註解總結

關於使用hibernate註解總結

code true ans 總結 排序 ade javabean ota 默認

首先,我們先了解一下什麽是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註解總結