標籤:運算式 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註解總結