1.hibernate到底有哪些常用注解?
(1)类级别注解
@Entity @Embeddable @Table
(2)属性级别
@Id @GeneratedValue @GenericGenerator
@Column @Emebedded @EmbeddedId
(3)映射关系注解
@ManyToOne @OneToMany @OneToOne(mappedBy="xx")
@ ManyToMany(mappedBy="xx")@JoinColumn @JoinTable
基本上开发常用的就是以上几个注解了,在这要注意以下导入jar包的时候,要导入那个JPA的jar包,需要用到hibernate的在导入hibernate框架的jar包,还有每个实体类或者引入的类,都必须要在hibernate.cfg.xml里面注入,即<mapping class="类的路径"/>
2.这些注解意味着什么,到底怎么用?什么时候用?
2.1 @Entity:很明显,这个是代表注册实体类的,就是我们建立的符合javaBean规范的实体类。
@Table:这个也很容易理解,这个是对应实体类在数据库表的声明,@Table(name="要生成的表名",schema="数据库",catalog="目录(mysql不支持,所以一般去掉)")
!!!!@Entity跟@Table这两个实体类的注解一般是一起使用的
@Embeddable:这个注解也很好理解,这个是用来标明非实体类在实体类中的引用,常常跟@Embedded一起使用。
@Id:标明主键
@GeneratedValue:主键策略生成器,属性:(generator=”主键的名字(只常用这一个)“,strategy=GenerationType.AUTO(自动生成,一般不用到))
@@GenericGenerator :主键生成策略,属性有(name="上面主键的名字",strategy="主键生成的策略assigned等")
@Column(length=45):数据库表字段的长度。
下面看看代码:
package com.hibernate.test01.dao.pojo002;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
//注明实体类
@Entity
@Table(name="t_location",schema="mytest")
public class Location {
@Id
@GeneratedValue(generator="provinceId")
@GenericGenerator(name="provinceId",strategy="assigned")
private String provinceId;
private String provinceName;
//注明要引用的类
@Embedded
private City city;
public Location() {
// TODO Auto-generated constructor stub
}
public Location(String provinceId, String provinceName, City city) {
super();
this.provinceId = provinceId;
this.provinceName = provinceName;
this.city = city;
}
public String getProvinceId() {
return provinceId;
}
public void setProvinceId(String provinceId) {
this.provinceId = provinceId;
}
public String getProvinceName() {
return provinceName;
}
public void setProvinceName(String provinceName) {
this.provinceName = provinceName;
}
public City getCity() {
return city;
}
public void setCity(City city) {
this.city = city;
}
}
package com.hibernate.test01.dao.pojo002;
import javax.persistence.Embeddable;
//注明是非实体类,被引入的类
@Embeddable
public class City {
private String cityId;
private String cityName;
public City() {
// TODO Auto-generated constructor stub
}
public City(String cityId, String cityName) {
super();
this.cityId = cityId;
this.cityName = cityName;
}
public String getCityId() {
return cityId;
}
public void setCityId(String cityId) {
this.cityId = cityId;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
}
测试类:
package com.hibernate.test01.dao.pojo002;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import com.hibernate.test01.HibernateSessionFactory;
public class test002 {
@Test
public void test() {
Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession();
City c = new City("c001","New York");
Location l = new Location("p001","jffsf",c);
Transaction tx = session.beginTransaction();
session.save(l);
tx.commit();
}
}
@EmbeddedId:用来标明联合主键的,跟@Embeddable一起使用,用代码来看看:
package com.hibernate.test01.dao.pojo002;
import javax.persistence.Column;
import javax.persistence.Embeddable;
@Embeddable
public class Student_PK {
@Column(length=50)
private String studentId;
@Column(length=50)
private String CourseId;
public Student_PK() {
// TODO Auto-generated constructor stub
}
public Student_PK(String studentId, String courseId) {
super();
this.studentId = studentId;
CourseId = courseId;
}
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public String getCourseId() {
return CourseId;
}
public void setCourseId(String courseId) {
CourseId = courseId;
}
}
package com.hibernate.test01.dao.pojo002;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table(name="student001")
public class Student01 {
@EmbeddedId
private Student_PK pk;
private String stuName;
private String address;
public Student01() {
// TODO Auto-generated constructor stub
}
public Student01(Student_PK pk, String stuName, String address) {
super();
this.pk = pk;
this.stuName = stuName;
this.address = address;
}
public Student_PK getPk() {
return pk;
}
public void setPk(Student_PK pk) {
this.pk = pk;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
3.映射关系注解
@ManyToOne:表示实体跟实体之间存在多对一的关系,使用的时候在主类,实例化要引入的实体类,或者在getter方法前面引入(多对一单向外键)
@OneToMany:表示实体跟实体之间存在一对多的关系,使用的使用在一的一方用Set<多的一方的实体类对象>标签(一对多单向外键)
@OneToOne(mappedBy="xx")表示实体跟实体之间存在一对多的关系
@ ManyToMany(mappedBy="xx哪个类来维护相互的关系")@JoinTable{JoinColumn={@JoinColumn="主键的名",inserveJoinColumn={@JoinColumn="外键的名"}}}
在双方的实体类中都用上,并且用Set<多的一方的实体类对象>标签。
@JoinColumn (name="外键名"):用来声明外键,就是谁作为外键之间的关系。
下面是代码:
package com.hibernate.test01.dao.pojo01;
import javax.persistence.CascadeType;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class student {
@Id
@GeneratedValue(generator="sid")
@GenericGenerator(name="sid",strategy="assigned")
private String sid;
private String sname;
@Embedded
private Address addr;
@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name="ClassId")
private ClassRoom classRoom;
@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name="Uid")
private IDCard idcard;
public student() {
// TODO Auto-generated constructor stub
}
public student(String sid, String sname, Address addr, IDCard idcard) {
super();
this.sid = sid;
this.sname = sname;
this.addr = addr;
this.idcard = idcard;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Address getAddr() {
return addr;
}
public void setAddr(Address addr) {
this.addr = addr;
}
public IDCard getIdcard() {
return idcard;
}
public void setIdcard(IDCard idcard) {
this.idcard = idcard;
}
}
package com.hibernate.test01.dao.pojo01;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class ClassRoom {
@Id
@GeneratedValue(generator="ClassId")
@GenericGenerator(name="ClassId",strategy="assigned")
private String ClassId;
private String className;
@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY)
@JoinColumn(name="ClassId")
private Set<student> students;
public ClassRoom() {
// TODO Auto-generated constructor stub
}
public ClassRoom(String classId, String className, Set<student> students) {
super();
ClassId = classId;
this.className = className;
this.students = students;
}
public String getClassId() {
return ClassId;
}
public void setClassId(String classId) {
ClassId = classId;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public Set<student> getStudents() {
return students;
}
public void setStudents(Set<student> students) {
this.students = students;
}
}
package com.hibernate.test01.dao.pojo01;
import javax.persistence.Embeddable;
@Embeddable
public class Address {
private String aid;
private String provice;
private String city;
public Address() {
// TODO Auto-generated constructor stub
}
public String getAid() {
return aid;
}
public void setAid(String aid) {
this.aid = aid;
}
public String getProvice() {
return provice;
}
public void setProvice(String provice) {
this.provice = provice;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public Address(String aid, String provice, String city) {
super();
this.aid = aid;
this.provice = provice;
this.city = city;
}
}
package com.hibernate.test01.dao.pojo01;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class IDCard {
@Id
@GeneratedValue(generator="Uid")
@GenericGenerator(name="Uid",strategy="assigned")
private String Uid;
private String name;
public IDCard() {
// TODO Auto-generated constructor stub
}
public IDCard(String uid, String name) {
super();
Uid = uid;
this.name = name;
}
public String getUid() {
return Uid;
}
public void setUid(String uid) {
Uid = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.hibernate.test01.dao.pojo01;
import java.util.HashSet;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import com.hibernate.test01.HibernateSessionFactory;
public class test {
@Test
public void test() {
Session session = HibernateSessionFactory.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
IDCard id = new IDCard("464564","hfkdfhk");
Address a = new Address("add134","dfd","zq");
student s2 = new student("s0004","h555o",a,id);
student s1 = new student("s0003","545f",a,id);
Set<student> stu = new HashSet<student>();
stu.add(s1);
stu.add(s2);
ClassRoom c = new ClassRoom("c004","5f",stu);
session.save(id);
session.save(s1);
session.save(s2);
session.save(c);
tx.commit();
}
}