hibernate初探之一对多映射(二)

紧接着昨天的继续做删除,修改操作。

修改学生属性

//修改学生信息
	@Test
	public void updateStudent()
	{
		Grade g=new Grade("java二班","java软件开发二班");
		Session session=HibernateUtil.getSession();
		Transaction tx=session.beginTransaction();
		Student stu = (Student)session.get(Student.class, 1);
		g.getStudents().add(stu);
		session.save(g);
		tx.commit();
		HibernateUtil.closeSession(session);
	}

删除学生信息

//删除学生信息
	@Test
	public void deleteStudent()
	{
		Session session =HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		Student stu=(Student)session.get(Student.class, 2);
		session.delete(stu);
		tx.commit();
		HibernateUtil.closeSession(session);
	}

set元素的常用属性



单向多对一关联

多对一的关系数据库中的外间参照关系最匹配,即在乙方的表中的一个外键参照另一个表的主键。

实现方法:

通过在多方持有一方的引用实现,需要在“多”的一端使用<many-to-one>配置(在映射文件中添加)

然后再多的多方中添加一方的属性

双向关联关系

在俩边映射文件中都添加关联关系,运行结果如下

但是最下面多了俩条update语句,这是由于班级在处理一对多的关联关系二产生的,但是这是完全没有必要的,因为在Insert语句中已经进行了关联关系,这样是非常影响性能的,而为了处理这个问题,我们用inverse属性来去掉这俩句话。

inverse属性

<set>节点的inverse属性指定关联关系的控制方向,默认由one方来维护

关联关系中,inverse="false" 则为主动方,由主动方负责维护管理关系

在一对多关联中,只能设置one方的Inverse为true,这将有助于性能的改善

例子:
在grade.hbm.xml配置文件中对student属性添加inverse属性设置为true如下所示
<!-- 配置单向的一对多关联关系,设置inverse属性为true,由多方维护关联关系-->
         <set name="students" table="STUDENT" inverse="true">
        	<!-- 指定关联的外键列 -->
        	<key column="gid"></key>
        	<one-to-many class="hibernate.Student"/>
        </set> 
运行结果发现最后的update语句不再执行。但是这样还有一个问题,班级与学生设置了关联关系,班级知道有哪些学生,那么当我们保存班级的时候,班级就理应把班级中的学生自动保存到数据库当中进行一个级联的关系,但是在这并没有,而是我们需要手动的进行保存学生,这就需要我们进行一个级联的配置

cascade属性

当设置了cascade属性不为none时,HIbernate会自动持久化所关联的对象

cascade属性的设置会带来性能上的变动,需谨慎设置


我们在grade.hbm.xml文件中配置cascade属性如下所示:

 <!-- 配置单向的一对多关联关系,设置inverse属性为true,由多方维护关联关系,当进行保存和更新时级联操作所关联的对象-->
         <set name="students" table="STUDENT" inverse="true" cascade="save-update">
        	<!-- 指定关联的外键列 -->
        	<key column="gid"></key>
        	<one-to-many class="hibernate.Student"/>
        </set> 
然后在测试文件中删除session.save(学生对象)的操作,发现运行后自动进行了级联关联保存操作,学生信息保存到了数据库中。

如何在eclipse for jave中添加数据库连接,如图所示点击右上角+图标,选择Database Development点击OK进入Date Source Explorer视图




右击DatabaseConnections -->new(新建数据连接)-->Mysql选择next


然后点击右上角的+如图所示选择好数据库驱动包,配置好连接的数据库与数据库密码,点击Test Connection进行连接测试,显示测试通过,点击Ok点击finish:



此时连接建立完毕出现如图所示画面,右击想查询的表Data-->Sample Contents即可查看数据库数据,表示与数据库连接成功即可进行hibernate的逆向工程:




在项目中导入hibernate的核心jar包以及hibernate注解与实体jar包

windows-->show view-->other


选择Hibernate Configurations,如图所示,在空白处右击,选择add Configuration



project:就是你要逆向工程的项目

DataBase Connection 之前配置的连接的数据库

Configuration file 生成的hibernate核心配置文件

然后点击apply ---Ok即可




然后转向Exporter


然后点击apply--->Run即可生成反向映射

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值