Hibernate之多对多篇

Hibernate值多对多篇:

首先Hibernate基于数据库持久层框架,好的OR框架。封装了JDBC对数据库繁琐的操作,完全以面向对象的方式来操作数据库,提供了以及一级,二级缓存。

下面就来谈谈Hibernate的优点与缺点:

  优点:

    1.对jdbc访问数据库进行了封装,简化了繁琐的操作。

    2.映射的灵活性

    3.非侵入性,移植性好。(就是说只需将你的映射文件及其配置文件移植到相应另一台计算机上照样可以运行,因为表的它是自己检查创建的,这一点非常好,不像Mybatis那                你要去建一个和他的映射文件字段,属性一样的表,才能运行,这一点比Mybatis好)

    4.提供一级二级缓存。

  缺点:

    1.无法对SQL进行优化。

    2.配置复杂。(什么一对一,一对多,多对多),这里主要针对自己手写,不过用工具根据数据库表生成实体类和映射文件就十分简单了。

    3.SQL执行效率低。

    4.不支持批量的删除,修改。

今天先来说说它的多对多:

  这里举的例子为学生与课程的关系,一个学生可以选修多个课程,一个课程可被多个学生选择,标准的多对多关系。

配置文件如下:主要用于指明数据库连接的信息及其是否展示SQL,方言,检查更新,关联相应的映射文件。

<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

	<property name="connection.username">scott</property>
	<property name="connection.password">orcl</property>

	<property name="connection.url">
		jdbc:mysql://localhost:3306/dbs
	</property>
	<!--
		作用:根据持久化类和映射文件生成表
		validate   在启动的时候验证持久化类和表的描述是否一样
		create-drop 一般不用,当hibernate启动的时候生成表,结束的时候删除表
		create  只要启动Hibernate的时候生成表
		update 在启动时候检查持久文件和表是否对应对应则不该,不对应则新建
	-->
	<property name="hbm2ddl.auto">update</property>
	<!--
		显示hibernate内部生成的sql语句
	-->
	<property name="show_sql">true</property>
	<property name="dialect">
		org.hibernate.dialect.MySQLDialect
	</property>
	<!-- 如果映射文件有两个要注意 -->
	<mapping resource="cn/hp/relaDemo/Students.hbm.xml" />
	<mapping resource="cn/hp/relaDemo/C
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4
 5 <hibernate-mapping>
 6
 7   <class name="cn.hp.relaDemo.Course">
 8
 9     <id name="cid" type="java.lang.Long" length="5">
10       <generator class="increment"></generator>
11     </id>
12
13      <property name="cname" length="10" type="java.lang.String"></property>
14
15      <property name="cdepartment" length="10" type="java.lang.String"></property>
16
17      <set name="students" table="student_course" cascade="save-update">
18        <key>
19          <column name="cid"></column>
20        </key>
21        <many-to-many class="cn.hp.relaDemo.Students"></many-to-many>
22      </set>
23
24   </class>
25 </hibernate-mapping>
26   
ourse.hbm.xml" />
</session-factory>

</hibernate-configuration>

相应的Course映射文件:

  

时间: 2024-10-16 23:22:46

Hibernate之多对多篇的相关文章

【SSH系列】Hibernate映射 -- 多对多关联映射

     映射原理 在数据库学习阶段,我们知道,如果实体和实体之间的关系是多对多,那么我们就抽出来第三张表,第一张表和第二张表的主键作为第三表的联合主键,结合我们的hibernate,多对多关联,无论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张表中做一个关联,用第三张表来解决可能造成的数据冗余问题.今天这篇博文小编来简单的介绍一下hibernate中的多对多关联映射. 在某些系统中,一个用户可以有多个角色,一个角色也可以有多个用户,so,她们之间的关系就是多对多,多对多关联

Hibernate单向多对多

最近做一个OA系统,用到了Hibernate框架,我发现,权限和角色的关系是一种多对多的关系,一个权限可以分配给多个角色,一个角色拥有多个权限. 多对多关系有两种,一种是单向的,一种是多向的.对于这个问题,曾经让我很犯难.单纯在语言上理解,会比较复杂,而从代码上理解,可能就会明白了. 下面模拟为角色授权的过程: 1,Hibernate使用Annotation 2,使用Junit进行测试. 3,使用Mysql作为后台数据库. 4,Hibernate不使用自动建表,也不采用反向工程. 过程 : 1,

Hibernate之one-to-many XML 篇

(转)Hibernate之one-to-many XML 篇     Hibernate的ORM关系, 下面将通过简单的事例来了解Hibernate ont-to-many/many-to-one双向配置.inverse.cascade的常用配置: 一.首现创建简单的数据库Table:user<用户>以及book<图书> 这里假设user与book的关系是一对多,创建代码如下: MySql下: (1)创建user Table: DROP TABLE IF EXISTS `user`

总结Hibernate的多对多关联的4个特点

总结Hibernate的多对多关联的4个特点: 以学生和课程多对多的例子说明,实体类部分代码: public class Course { private Integer cid; private String cname; private Set<Student> stuSet; //getter setter...... } public class Student { private Integer id; private String name; private Date birthd

Hibernate单向多对一级联删除引发的问题

Hibernate单向多对一在级联删除时,会出现一些问题. 下面模拟我遇到的问题: 这次模拟与之前的一次模拟方法一直,博客:http://blog.csdn.net/openjdk8/article/details/38424403 模拟场景:有一个部门表t_dept,职位表t_position. 需求:当删除部门表时,不管职位表有没数据,照样删除.删除职位表就直接删除. 1,建表: 建表: t_dept::部门表 t_position:职位表 CREATE TABLE t_dept(    d

Hibernate映射多对多双向关联关系(小案例)

多对多双向关联关系(Project(工程)/Emp(员工)为案例): 步骤如下: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 private Integer pid; //名称 private String pname; //定义集合类型的Emp属性 private Set<Emp> emps=new HashSet<Emp>(); public Integer getPid() { return pid; }

Hibernate annotation多对多配置

角色(用户组),用户多对多. 角色实体配置: private Set<TAuthUser> users; @ManyToMany @JoinTable(name="t_auth_user_role",joinColumns={@JoinColumn(name="role_id")},inverseJoinColumns={@JoinColumn(name="user_id")})//配置一方 public Set<TAuthUs

hibernate中多对多关联

hibernate中多对多关联 “计应134(实验班) 凌豪” 在关系数据库中有一种常见的关系即多对多关系,例如课程和学生的关系,一个学生可以选择多门课程,同时一门课程也可以被多个学生选择, 因此课程与学生的关系就可以看成是多对多的关系,其中课程表的结构如下图所示: 学生表user 在关系数据库中不能直接建立多对多关联,要想建立这种多对多的关系只能借助第三张中间表, 因此为了建立这种多对多的关系我们需要建立第三张表User_course 为了实现表的多对多关联,需要在两个表的Hibernate配

Hibernate的多对多映射关系

example: 老师(teacher)和学生(Student)就是一个多对多的关系吧?老师可以有多个学生,学生也可以由多个老师,那在Hibernate中多对多是怎样实现的呢?? 在Hibernate中多对多关系分为两种:1单向的多对多,2双向的多对多 下面详细说明一些两种有什么不同和实现步骤 I单向的多对多实现步骤: 1新建teacher.student表,可以任意选择在其中一个表添加另一个表的集合,(例如在teacher中添加student的set<Student>集合,例如private