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

hibernate多对多配置(配置文件方式)

阅读更多

hibernate多对多关系配置

 

 

       hibernate关系映射配置方式有两种,一种是配置文件方式,一种则是注解配置方式,这次本文讲解的是配置文件的方式。

在hibernate中多对多关系也有两种实现方式:

一、

       第一种,直接配置mang-to-many的多对多关系,这种方式的特点是中间表只有两个字段,分别是两个关联表的主键,而程序中也不会产生中间表的实体。

这里以Role角色-Right权限为例,一个角色有多个权限 ,一个权限也可以被赋予给多个角色。

Role类:

 

public class Role{


	private String role_id;   //角色id
	private String role_name;//角色名称
	private Date cre_time;//创建时间
	private String parent_id;//父级角色 
	private String describe;//描述
	private int sort;//序号
	private List<Right> rights;//角色拥有的权限
	

	public String getRole_id() {
		return role_id;
	}
	public void setRole_id(String roleId) {
		role_id = roleId;
	}

	public String getRole_name() {
		return role_name;
	}
	public void setRole_name(String roleName) {
		role_name = roleName;
	}

	public Date getCre_time() {
		return cre_time;
	}
	public void setCre_time(Date creTime) {
		cre_time = creTime;
	}

	public String getParent_id() {
		return parent_id;
	}
	public void setParent_id(String parentId) {
		parent_id = parentId;
	}

	public String getDescribe() {
		return describe;
	}
	public void setDescribe(String describe) {
		this.describe = describe;
	}

	public int getSort() {
		return sort;
	}
	public void setSort(int sort) {
		this.sort = sort;
	}
	
	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 + "]";
	}

	
}

Right类:

 

 

 

public class Right{


	private String right_id;//权限id
	private String right_name;//权限名称
	private String url;//权限URL
	private String parent_id;//父级权限
	private int lev;//权限等级
	private int sort;//序号
	
	private List<Role> roles;

	public String getRight_id() {
		return right_id;
	}
	public void setRight_id(String rightId) {
		right_id = rightId;
	}

	public String getRight_name() {
		return right_name;
	}
	public void setRight_name(String rightName) {
		right_name = rightName;
	}

	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}


	public String getParent_id() {
		return parent_id;
	}
	public void setParent_id(String parentId) {
		parent_id = parentId;
	}

	public int getLev() {
		return lev;
	}
	public void setLev(int lev) {
		this.lev = lev;
	}
	public int getSort() {
		return sort;
	}
	public void setSort(int sort) {
		this.sort = sort;
	}
	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 + "]";
	}


	
	
}

 Role实体配置:

 

 

<class name="Role" lazy="true" table="SYS_ROLE">
	
	
		<id name="role_id">
			<generator class="uuid" />
		</id>
		
		<property name="role_name"></property>
		<property name="cre_time"></property>
		<property name="parent_id"></property>
		<property name="describe"></property>
		<property name="sort"></property>
	
		<bag name="rights" table="role_right">
                    <key column="role_id"/>
                    <many-to-many class="Right" column="right_id"/>
                </bag> 
		
		</class>

 Right实体配置:

 

 

<class name="Right" lazy="true" table="SYS_RIGHTS">
	
	
		<id name="right_id">
			<generator class="uuid" />
		</id>
		
		<property name="right_name"></property>
		<property name="url"></property>
		<property name="parent_id"></property>
		<property name="lev"></property>
		<property name="sort"></property>
	
		<bag name="roles" table="role_right">
            <key column="right_id"/>
            <many-to-many class="Role" column="role_id"/>
        </bag> 
		
</class>




 

 

 二、

       第二种实现方式的特点是程序会产生中间表实体,然后在中间表实体中配置两个mang-to-one即可。

这里以学生-成绩-课程举例,成绩类即是中间表实体,记录某一个学生的某一个课程的成绩。在这里第一种方式是不适用于这个例子的,因为第一种方式的中间表只保留两个关联表的主键,而在这里成绩中间表还需要记录学生课程的成绩。

Student类:

 

public class Student {

	private String id;
	private String name;

	private List<Score> scoreList;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	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 + "]";
	}
	
	

}

 

 

Course类:

 

public class Course {

	private String id;
	private String name;
	private List<Score> scoreList;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	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 + "]";
	}
	
	
}

 

 

Score类:

 

public class Score {

	private String id;//主键id
	private Student student;//学生id
	private Course course;//课程id
	private int score;//成绩
	
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public Student getStudent() {
		return student;
	}
	public void setStudent(Student student) {
		this.student = student;
	}
	public Course getCourse() {
		return course;
	}
	public void setCourse(Course course) {
		this.course = course;
	}
	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() + "]";
	}
	
	
}

 

 

Studnet实体配置:

 

<class name="Student" lazy="true" table="student">

		<id name="id">
			<generator class="uuid" />
		</id>
		<property name="name"></property>
		<bag name="scoreList">
	        <key column="student"/>
	        <one-to-many class="Score"/>
   		 </bag>
		
	</class>

 Course实体配置:

 

<class name="Course" lazy="true" table="course">
		<id name="id">
			<generator class="uuid" />
		</id>
		<property name="name"></property>
		<bag name="scoreList">
	        <key column="course"/>
	        <one-to-many class="Score"/>
   		</bag>
		
	</class>

 

Score实体配置:

<class name="Score" lazy="true" table="score">
		<id name="id">
			<generator class="uuid" />
		</id>
		<property name="score"></property>
		<many-to-one name="student" column="student" ></many-to-one>
    	        <many-to-one name="course" column="course" ></many-to-one>
</class>

 

最后,第二种方式还有一种可能的情况,比如是学生id 和课程id 作为成绩表的联合主键,这时Score实体配置改动如下:

<class name="Score" lazy="true" table="score">
		<composite-id>
			<key-many-to-one name="student" column="student"></key-many-to-one>
			<key-many-to-one name="course" column="course"></key-many-to-one>
		</composite-id>
		<property name="score"></property>
</class>

 

 

分享到:
评论

相关推荐

    Hibernate配置文件hibernate.cfg.xml中配置信息详解

    Hibernate配置文件hibernate.cfg.xml中配置信息详解!

    hibernate配置文件详解

    Hibernate 配置文件详解 Hibernate 是一个流行的 ORM(Object-Relational Mapping)框架,用于简化 Java 应用程序中的数据库交互。 Hibernate 的配置文件是其核心组件之一,用于定义 Hibernate 的运行期参数。下面...

    hibernate配置文件

    hibernate配置文件 里面提供了连接数据库 数据库使用的方言 是否打印SQL语句 sql语句的格式 以及对象-关系映射文件的地址等

    Hibernate配置文件加载后修改配置信息

    在Java开发过程中,特别是在使用ORM框架如Hibernate时,开发者经常需要对配置文件中的数据库连接信息进行动态修改或加密处理。本文将详细介绍如何利用反射机制来修改已经加载到内存中的`hibernate.cfg.xml`配置文件...

    eclipse 逆向生成hibernate配置文件

    逆向生成hibernate配置文件逆向生成hibernate配置文件逆向生成hibernate配置文件逆向生成hibernate配置文件逆向生成hibernate配置文件逆向生成hibernate配置文件

    hibernate--5.Hibernate配置文件详解

    本篇将详细解析Hibernate的配置文件,帮助你深入理解其工作原理和配置过程。 标题"hibernate--5.Hibernate配置文件详解"暗示我们将探讨的是Hibernate 5版本的配置细节。这个版本引入了一些新特性和改进,同时也保持...

    Hibernate程序的配置文件

    4. **实体映射**:配置文件中通常还会包含对Java实体类的映射信息。通过`&lt;mapping resource="entity/EntityName.hbm.xml"/&gt;`来指定每个实体类的映射文件,这些文件描述了Java对象与数据库表之间的映射关系。 5. **...

    spring整合struts2与hibernate核心配置文件

    整合SSH涉及到的主要配置文件有`struts2-spring-plugin.xml`、`spring-context.xml`以及Hibernate的相关配置文件(如`hibernate.cfg.xml`)。`struts2-spring-plugin.xml`配置Struts2与Spring的集成,确保Action类由...

    Hibernate自动生成配置文件

    ### Hibernate自动生成配置文件详解 #### 一、Hibernate与自动生成配置文件的重要性 ...因此,掌握并熟练运用MyEclipse中Hibernate配置文件的自动生成功能,对任何级别的Java开发者来说都是一项极为有价值的技能。

    hibernate完整配置文件

    Hibernate是Java领域中一款广泛应用的关系对象映射框架,它允许开发者用面向对象...这个“hibernate完整配置文件”压缩包应该包含了所有必要的配置和示例,是初学者和有经验的开发者深入理解Hibernate配置的宝贵资源。

    Hibernate核心配置文件对照表

    `hibernate.properties`是Hibernate的核心配置文件,用于设定与数据库连接、缓存策略、事务管理等相关的重要参数。下面我们将详细探讨这个配置文件中的关键知识点。 1. **数据库连接配置** - `hibernate....

    hibernate配置文件包

    这是最新的hibernate的下载和安装包。hibernate配置文件主要是用于配置数据库连接、事务管理,以及指定hibernate本省的配置信息和hibernate的映射文件信息。

    Hibernate的配置文件

    在这个场景中,我们关注的是Hibernate的配置文件——`hibernate.cfg.xml`。这个文件是Hibernate应用的核心,它定义了数据源、SessionFactory、实体类映射等关键信息,使得Java对象可以直接与数据库进行交互。 首先...

    hibernate--5.Hibernate配置文件详解-2

    本文将深入探讨Hibernate配置文件,这是使用Hibernate进行数据库操作的基础。 标题"hibernate--5.Hibernate配置文件详解-2"暗示我们将继续上一节的内容,进一步深入理解Hibernate配置文件的各个方面。通常,...

    在myeclipse中配置hibernate 自动生成配置文件

    在myeclipse中配置hibernate 自动生成配置文件在myeclipse中配置hibernate 自动生成配置文件

    oracle的hibernate配置文件

    `hibernate1.cfg.xml`是Hibernate配置的核心文件,它定义了数据源、连接池、持久化类、缓存策略等关键信息。以下将逐个解析这些重要部分。 1. 数据源配置: 在`hibernate1.cfg.xml`中,首先需要配置数据源。对于...

    Hibernate4 jar包及配置文件

    【Hibernate4 jar包及配置文件】是Java开发中用于实现对象关系映射(ORM)的重要工具,它简化了数据库操作,使开发者可以使用面向对象的方式来处理数据库事务。在这个压缩包中,我们通常会找到一系列的Hibernate核心...

    《Hibernate 各类映射文件与配置文件模板》HibernateMappingConfig.zip

    《Hibernate各类映射文件与配置文件模板》是一个包含多种Hibernate映射和配置示例的压缩包,用于帮助开发者理解和使用Hibernate框架。Hibernate是Java领域的一个流行的对象关系映射(ORM)框架,它允许开发者用面向...

    hibernateJar包及配置文件

    Hibernate则更适合复杂场景,如高级查询、多对多关系等。 总结,Hibernate作为一个强大的ORM框架,极大地简化了Java开发者与数据库的交互,而其配置文件和jar包是实现这一目标的关键组成部分。理解和掌握Hibernate...

Global site tag (gtag.js) - Google Analytics