首先,我们先了解一下什么是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。
@GeneratedValue(strategy = GenerationType.AUTO)
@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注解总结
原文地址:https://www.cnblogs.com/zwk2018/p/9527004.html