`
max1487
  • 浏览: 103391 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

hibernate多对多关系-注解配置

阅读更多

hibernate多对多注解配置

 

上一篇文章主要讲解了Hibernate多对多配置文件的配置方法,接下来继续讲解注解方式配置多对多关系的方法。注解功能已经加入hibernate4之中了,但hibernate3要使用注解配置还需要另外引入jar包。

需要的jar包可见附件:


 

接下来开始进入正题:

一、第一种直接配置多对多关系,以Role角色-Right权限为例。

 

import java.util.Date;
import java.util.List;
import javax.persistence.*;
import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="SYS_ROLE") 
public class Role{


	private String role_id;
	private String role_name;
	private Date cre_time;
	private String parent_id;
	private String describe;
	private int sort;
	
	private List<Right> rights;
	
	@Id
	@GeneratedValue(generator = "paymentableGenerator")  
	@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
	public String getRole_id() {
		return role_id;
	}
	public void setRole_id(String roleId) {
		role_id = roleId;
	}
	@Column(name="role_name")
	public String getRole_name() {
		return role_name;
	}
	public void setRole_name(String roleName) {
		role_name = roleName;
	}
	@Column(name="cre_time")
	public Date getCre_time() {
		return cre_time;
	}
	public void setCre_time(Date creTime) {
		cre_time = creTime;
	}
	@Column(name="parent_id")
	public String getParent_id() {
		return parent_id;
	}
	public void setParent_id(String parentId) {
		parent_id = parentId;
	}
	@Column(name="describe")
	public String getDescribe() {
		return describe;
	}
	public void setDescribe(String describe) {
		this.describe = describe;
	}
	@Column(name="sort")
	public int getSort() {
		return sort;
	}
	public void setSort(int sort) {
		this.sort = sort;
	}
        //多对多映射
	@ManyToMany(targetEntity = Right.class, fetch = FetchType.LAZY)  
	@JoinTable(name = "ROLE_RIGHT", joinColumns = @JoinColumn(name = "ROLE_ID"), inverseJoinColumns = @JoinColumn(name = "RIGHT_ID"))  
	public List<Right> getRights() {
		return rights;
	}
	public void setRights(List<Right> rights) {
		this.rights = rights;
	}
	@Override
	public String toString() {
		return "Role [cre_time=" + cre_time + ", describe=" + describe
				+ ", parent_id=" + parent_id + ", role_id=" + role_id
				+ ", role_name=" + role_name + ", sort=" + sort + "]";
	}
	
		
		
		
}

 
 

import java.util.List;
import javax.persistence.*;
import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="SYS_RIGHTS")
public class Right{


	private String right_id;
	private String right_name;
	private String url;
	private String parent_id;
	private int lev;
	private int sort;
	
	private List<Role> roles;

	@Id
	@GeneratedValue(generator = "paymentableGenerator")  
	@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
	public String getRight_id() {
		return right_id;
	}
	public void setRight_id(String rightId) {
		right_id = rightId;
	}

	@Column(name="right_name")
	public String getRight_name() {
		return right_name;
	}
	public void setRight_name(String rightName) {
		right_name = rightName;
	}
	@Column(name="url")
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}

	@Column(name="parent_id")
	public String getParent_id() {
		return parent_id;
	}
	public void setParent_id(String parentId) {
		parent_id = parentId;
	}	
	@Column(name="lev")
	public int getLev() {
		return lev;
	}
	public void setLev(int lev) {
		this.lev = lev;
	}
	@Column(name="sort")
	public int getSort() {
		return sort;
	}
	public void setSort(int sort) {
		this.sort = sort;
	}
        //多对多映射
	@ManyToMany(mappedBy="rights")
	public List<Role> getRoles() {
		return roles;
	}
	public void setRoles(List<Role> roles) {
		this.roles = roles;
	}
	@Override
	public String toString() {
		return "Right [lev=" + lev + ", parent_id=" + parent_id + ", right_id="
				+ right_id + ", right_name=" + right_name 
				+ ", sort=" + sort + ", url=" + url + "]";
	}


	
	
}

 

 

最后,在hibernate-cfg.xml文件中配置对应的Role和Right实体即可。

 

<mapping class="com.entor.hibernate.manytomany.Role"/>
<mapping class="com.entor.hibernate.manytomany.Right"/>

到这里一个多对多配置就完成了。

 

常用的注解:

1.@Entity 声明实体

2.@Table(name="SYS_ROLE") 声明实体类对应的表名

3.@Column(name="role_name") 声明属性对应的列

4.@Id @GeneratedValue(generator = "paymentableGenerator") @GenericGenerator(name = "paymentableGenerator", strategy = "uuid")

声明主键及生成策略,在这里uid的生成策略

5. @OneToOne(mappedBy="card") 一对一映射

6.@OneToMany(fetch = FetchType.LAZY, mappedBy = "student") 一对多映射

7.@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "student")

    多对一映射

8.@ManyToMany(targetEntity = Right.class, fetch = FetchType.LAZY)

@JoinTable(name = "ROLE_RIGHT", joinColumns = @JoinColumn(name = "ROLE_ID"), inverseJoinColumns = @JoinColumn(name = "RIGHT_ID"))

  多对多映射

9.@Transient      表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性

 

 

二、第二种情况,就是在中间实体中配置两个多对一关系,以学生Student-成绩Score-课程Course为例。

 

import java.util.List;
import javax.persistence.*;
import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="student")
public class Student {

	private String id;
	private String name;

	private List<Score> scoreList;
	
	@Id
	@GeneratedValue(generator = "paymentableGenerator")  
	@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	@Column(name="name")
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
        //学生端一对多,学生的成绩列表,也可以选择不配置
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "student")
	public List<Score> getScoreList() {
		return scoreList;
	}
	public void setScoreList(List<Score> scoreList) {
		this.scoreList = scoreList;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + "]";
	}
	
	

}

 

import javax.persistence.*;
import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="score")
public class Score {

	private String id;//主键id
	private Student student;//学生id
	private Course course;//课程id
	private int score;//成绩
	
	@Id
	@GeneratedValue(generator = "paymentableGenerator")  
	@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
        //多对一映射
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "student")
	public Student getStudent() {
		return student;
	}
	public void setStudent(Student student) {
		this.student = student;
	}
        //多对一映射
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "course")
	public Course getCourse() {
		return course;
	}
	public void setCourse(Course course) {
		this.course = course;
	}
	@Column(name="score")
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	@Override
	public String toString() {
		return "Score [course=" + course.getName() + ", score=" + score + ", student="
				+ student.getName() + "]";
	}
	
	
}

 

import java.util.List;
import javax.persistence.*;
import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="course")
public class Course {

	private String id;
	private String name;
	private List<Score> scoreList;
	
	@Id
	@GeneratedValue(generator = "paymentableGenerator")  
	@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	@Column(name="name")
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
        //课程端一对多,课程的成绩列表,也可以选择不配置
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "course")
	public List<Score> getScoreList() {
		return scoreList;
	}
	public void setScoreList(List<Score> scoreList) {
		this.scoreList = scoreList;
	}
	@Override
	public String toString() {
		return "Course [id=" + id + ", name=" + name + "]";
	}
	
	
}

 

以上就是多对多两种情况的注解配置方法了,注解方式真的是很优秀的配置方法,很直观很简洁一目了然,也不需要另外配置xml文件,直接在实体类文件中注明数据库关系映射的情况即可,开发效率提高很明显,我用过注解配置之后都不想用配置文件来配置了,哈哈~

 

  • 大小: 5.6 KB
1
1
分享到:
评论

相关推荐

    HIBERNATE:Hibernate 学习一--注解方式自动建表

    - `@OneToMany`、`@ManyToOne`、`@OneToOne`、`@ManyToMany`:表示不同类型的关联关系,例如一对多、多对一、一对一和多对多。 3. **配置自动建表**: - 在Hibernate的配置文件(hibernate.cfg.xml)中,可以通过...

    hibernate-jpa-2.1-api-1.0.0.final.jar.zip

    `hibernate-jpa-2.1-api-1.0.0.final.jar`是Hibernate对JPA 2.1规范的实现库,它使得开发者能够使用Hibernate的高效功能同时遵循JPA规范。 **1. Hibernate与JPA的关系** Hibernate最初作为一个独立的ORM框架,后来...

    (4)Hibernate中的many-to-one和one-to-many关系

    本话题主要探讨两种基本的关系映射类型:many-to-one(多对一)和one-to-many(一对多)。这两种关系映射是数据库中常见的关联类型,理解和掌握它们对于开发高质量的Java应用至关重要。 1. many-to-one关系 many-to...

    hibernate,hibernate3,Middlegen-Hibernate-r5

    "hibernate-annotations"是Hibernate的一个扩展,引入了Java注解来定义对象-关系映射,替代了传统的XML配置文件。这样使得映射信息可以直接嵌入到Java类中,使得代码更加简洁,也更容易理解和维护。例如,`@Entity`...

    hibernate-commons-annotations-5.0.1.Final.jar

    3. `org.hibernate.cfg`:这里的类主要用于配置和初始化Hibernate环境,如`AnnotationConfiguration`类就是配置Hibernate的入口,它会读取注解并生成相应的映射信息。 4. `org.hibernate.boot.model`和`org....

    hibernate-release-5.2.10

    7. **关联映射**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@ManyToMany)关系的映射,方便处理对象间的关联关系。 8. **延迟加载**:Hibernate的懒加载策略可以在需要时才...

    Hibernate关于注解的一对多,多对多,一对一

    本篇文章将深入探讨Hibernate中注解的一对多、多对多和一对一关系映射。 ### 一对多关系 在现实生活中,例如一个班级有一个班主任,而班主任可以管理多个学生,这就是典型的“一对多”关系。在Hibernate中,我们...

    spring-hibernate注解配置源码

    本实例"spring-hibernate注解配置源码"旨在展示如何在不使用XML配置的情况下,通过注解的方式整合Struts2、Spring和Hibernate,创建一个完整的MVC(模型-视图-控制器)架构的应用。下面将详细介绍这个过程中的关键...

    Hibernate一对多关联映射(注解)

    总结一下,Hibernate的一对多关联映射通过注解方式定义了对象间的关联关系,使得我们在编程时能够以面向对象的方式操作数据,而底层数据库的操作则由Hibernate自动完成。这种方式大大提高了开发效率,同时也降低了...

    hibernate单向多对多映射(注解版)

    在Java的持久化框架Hibernate中,单向多对多映射是一种常见的关系映射方式,尤其在处理数据库中两个实体间复杂关联时显得尤为重要。在注解版的Hibernate中,我们不再需要传统的XML配置文件,而是直接在实体类上使用...

    Hibernate one-to-many / many-to-one关系映射

    在Hibernate的hbm.xml文件中,一对一关系通过&lt;one-to-one&gt;标签,一对多关系通过、、或标签来定义。需要详细指定实体类名、主键列名以及关联的外键列名。 2. 注解配置: 在实体类上直接使用@OneToOne、@OneToMany等...

    hibernate双向多对多关联映射(注解版)

    在这个“hibernate双向多对多关联映射(注解版)”的主题中,我们将深入探讨如何使用Hibernate的注解配置来处理数据库中的双向多对多关联关系。 首先,多对多关联在数据库设计中是指两个实体之间存在多个对应关系,...

    Hibernate多对一映射(注解版)

    本教程将重点讲解如何在Hibernate中实现多对一的映射关系,采用的是注解方式进行配置。 **一、多对一关系** 在数据库设计中,多对一关系表示一个实体可以与另一个实体的多个实例相关联。例如,一个部门可以有多名...

    基于注解的关联关系Hibernate

    在这个“基于注解的关联关系Hibernate”的主题中,我们将深入探讨如何使用Hibernate的注解来配置不同类型的关联关系,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-...

    注解配置 javabean hibernate 关联关系

    在Hibernate框架中,注解配置被广泛用于简化对象关系映射(ORM)的配置,使得Java Bean可以直接与数据库表进行关联。本篇文章将深入探讨如何使用注解配置Java Bean并建立Hibernate的关联关系。 首先,我们需要理解...

    hibernate-release-5.3.2.Final

    它通过XML或注解的方式定义对象与数据库表之间的映射关系,使得开发者可以像操作普通Java对象一样操作数据库数据,减少了对SQL的直接依赖。 二、5.3.2.Final新特性 1. 性能优化:5.3.2.Final版本在性能方面进行了...

    hibernate多对多

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系是数据库中常见的关联类型,它允许一个实体实例对应多个其他实体实例,反之亦然。在本案例中,我们将深入探讨如何使用Hibernate来处理多对多的关系映射,...

    hibernate注解配置

    ### Hibernate注解配置详解 #### 一、概述 Hibernate 是一款强大的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互过程。在使用Hibernate的过程中,开发者可以通过注解来实现对象与数据库表之间...

    hibernate(多对多关系映射)

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系映射是一种常见的数据库交互模式,它用于表示两个实体之间复杂的关系。在这个场景中,一个实体可以与多个其他实体相关联,反之亦然。例如,在学生和课程...

    hibernate-annotation3.4.0 + hibernate-distribution3.3.2 + slf4j-1.5.8.rar

    在3.4.0的Hibernate注解与3.3.2的Hibernate核心之间进行集成,需要确保所有依赖的JAR文件正确配置,包括Hibernate的各个模块(如hibernate-core、hibernate-entitymanager等)以及JTA(Java Transaction API)和JPA...

Global site tag (gtag.js) - Google Analytics