文档章节

Hibernate的Annotation

pmos
 pmos
发布于 2016/10/17 23:18
字数 698
阅读 18
收藏 1

3、Hibernate的Annotation

特别注意:Hibernate的Annotation要依赖于JPA包。

在Hibernate的3.5之前都需要下载Hibernate的Annotation的jar包,在3.5之后Hibernate的Annotation jar包已
经集成到Hibernate包中了。

3.1、基本映射

//注意是javax.persistence.Entity
@Entity
//设置表名
@Table(name="t_user")
public class User {
	private int id;
	private String username;
	private String password;
	private String nickname;
	private Date born;
	private Date createDate;
	
	//@Column可以为这个字段进行定义
	@Column(name="create_date")
	public Date getCreateDate() {
		return createDate;
	}
	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}
	
	//标志为id属性
	@Id
	//GeneratedValue表示自动递增
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}

3.2、一对一

@Entity
@Table(name="t_id_card")
public class IDCard {
	private int id;
	private String no;
	private Person person;
	
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNo() {
		return no;
	}
	public void setNo(String no) {
		this.no = no;
	}
	
	@OneToOne
	//@JoinColumn可以设置外键的名称。
	//只要使用了OneToOne就会在自己的表中增加外键。
	@JoinColumn(name="pid")
	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
@Entity
@Table(name="t_person")
public class Person {
	private int id;
	private String name;
	private IDCard idCard;
	
	//只要设置了@OneToOne就会在自己的表中增加外键,所以只有设置mappedBy="自己在对端的属性名称"
	//才能说明关系由对方维护
	@OneToOne(mappedBy="person") //对端的属性名称,说明关系由对方来维护
	public IDCard getIdCard() {
		return idCard;
	}
	public void setIdCard(IDCard idCard) {
		this.idCard = idCard;
	}
	
	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

3.3、一对多

m:1单向:

	@ManyToOne(fetch=FetchType.LAZY) //延迟加载
	//外键名称
	@JoinColumn(name="cid")
	public Classroom getClassroom() {
		return classroom;
	}
	public void setClassroom(Classroom classroom) {
		this.classroom = classroom;
	}

1:m单向:

	@OneToMany
    //加入到对方表中的外键
    @JoinColumn(name="cid")
    //等于xml中的lazy="extra"
	@LazyCollection(LazyCollectionOption.EXTRA)
	public Set<Student> getStudents() {
		return students;
	}
	public void setStudents(Set<Student> students) {
		this.students = students;
	}

双向:

	@ManyToOne(fetch=FetchType.LAZY) //延迟加载
	//外键名称
	@JoinColumn(name="cid")
	public Classroom getClassroom() {
		return classroom;
	}
	public void setClassroom(Classroom classroom) {
		this.classroom = classroom;
	}


    @OneToMany(mappedBy="classroom")
    //@JoinColumn(name="cid")
    //设置了mappedBy就已经等于说明由对方维护关系,所以不同在设置JoinColumn
	@LazyCollection(LazyCollectionOption.EXTRA)
	public Set<Student> getStudents() {
		return students;
	}
	public void setStudents(Set<Student> students) {
		this.students = students;
	}

3.4、多对多

多对多双向:

	@ManyToMany
	//name="t_role_admin"表示关联表的名称,
	//joinColumns={@JoinColumn(name="rid")}表示自己在关联表中的外键名称,是数组
	//inverseJoinColumns={@JoinColumn(name="aid")}表示对方在关联表中的外键名称,也是数组
	@JoinTable(name="t_role_admin",joinColumns={@JoinColumn(name="rid")},
				inverseJoinColumns={@JoinColumn(name="aid")})
	public Set<Admin> getAdmins() {
		return admins;
	}
	public void setAdmins(Set<Admin> admins) {
		this.admins = admins;
	}


    @ManyToMany(mappedBy="admins") //由对方维护关系
	public Set<Role> getRoles() {
		return roles;
	}
	public void setRoles(Set<Role> roles) {
		this.roles = roles;
	}

两个一对多:

	@OneToMany(mappedBy="course")
	@LazyCollection(LazyCollectionOption.EXTRA)
	public Set<TeacherCourse> getTcs() {
		return tcs;
	}
	public void setTcs(Set<TeacherCourse> tcs) {
		this.tcs = tcs;
	}


    @OneToMany(mappedBy="teacher")
	@LazyCollection(LazyCollectionOption.EXTRA)
	public Set<TeacherCourse> getTcs() {
		return tcs;
	}
	public void setTcs(Set<TeacherCourse> tcs) {
		this.tcs = tcs;
	}


    @ManyToOne
	@JoinColumn(name="tid")
	public Teacher getTeacher() {
		return teacher;
	}
	public void setTeacher(Teacher teacher) {
		this.teacher = teacher;
	}
	
	@ManyToOne
	@JoinColumn(name="cid")
	public Course getCourse() {
		return course;
	}
	public void setCourse(Course course) {
		this.course = course;
	}

 

© 著作权归作者所有

上一篇: Hibernate HQL
下一篇: Hibernate的映射
pmos
粉丝 12
博文 128
码字总数 213147
作品 0
其它
项目经理
私信 提问
hibernate学习笔记03-- hibernate + mysql + Annotation

Annotation 的使用主要分为 2 步: 1.1 加入相应的 jar 包: hibernate-annotations.jar // Annotation 核心包 ejb3-persistence.jar // 符合 jpa 标准的 Annotation 的实现 hibernate-comm......

风中海岸
2015/08/30
96
0
Spring 3 MVC and JSR303 @Valid example

In Spring 3, you can enable “mvc:annotation-driven” to support JSR303 bean validation via annotation, if any JSR 303 validator framework on the classpath. Note Hibernate Vali......

凯文加内特
2015/10/10
116
0
幽默者/hibernate mysql demo

hibernate-mysql-demo 基于maven构建的hibernate mysql demo。 基于xml、annotation的hibernate demo:其中包含one-to-one、one-to-many、many-to-many映射关系的配置。 独立的测试用例。 内...

幽默者
2015/01/26
0
0
Dao层系列-4-Hibernate Spring Annotation

之前几篇文章主要是介绍 Hibernate、Hibernate Annotation、Hibernate Spring 集成 这篇文章主要是:Hibernate和Spring集成后都使用注解的方式。 Hibernate使用注解进行关系映射,Spring使用...

onlyfish
2013/07/19
0
0
Hibernate Annotations

Hibernate Annotations為Hibernate的擴充模組之一,如果您的JDK為5.0以上的版本,即可使用它所提供的Annotation來於.java 檔案上,進行物件與表格的對映定義,在開發上,讓物件屬性的對映設定...

匿名
2009/03/01
3K
0

没有更多内容

加载失败,请刷新页面

加载更多

抽象同步队列AQS——AbstractQueuedSynchronizer锁详解

AQS——锁的底层支持 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资...

须臾之余
今天
3
0
springboot配置百度UEditor 富文本详解

富文本简介 UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... 准备工作 ueditor需要单独文...

wotrd
昨天
4
0
mysql 5.7之my.cnf配置大全

[client]port = 3306socket = /tmp/mysql.sock[mysqld]###############################基础设置######################################Mysql服务的唯一编号 每个mysql服务...

Online_Reus
昨天
3
0
MAVEN打包时引入外部链接的包

1.项目引入了ORACLE的jar包,MAVEN配置如下 2.打jar包的时候需要指定下main入口函数mainClass <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> ......

Cobbage
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部