学好hibernate系列之常用注解开发

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();
	}

}







  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值