Hibernate深度学习笔记

来源:互联网 发布:js替换字符串中的数字 编辑:程序博客网 时间:2024/05/17 20:42

深度解析

Session.save()Session.getTransaction().commit() Session.flush() Session.evit()

当主键生成方式为uuid时,执行Session.save()不会立即发送sql语句,数据库中还没有,临时集合中的实体和持久化集合中各保存了一份对象实体,此时持久化对象中变量isatDatabase=false;当执行Session.flush()方法时,hibernate会根据临时结合中的实体对象生成sql语句并清空临时结合中的数据,然后设置持久化集合中的isatDatabase=true,当执行Session.getTransaction().commit()时其会到临时集合中找实体是否还存在,如果存在,则清空并发送sql语句,然后将持久化对象中isatDatabase改为true。如果在Session.getTransaction().commit()之前执行Session.evit()方法,该方法会清空持久化集合中的数据,将导致Session.getTransaction().commit()执行时完清理临时集合中的对象时找不到持久化对象中的isatDatabase而报错。Session.getTransaction().commit()方法中实际上包含了Session.flush()方法,该方法的作用有两个,一个是清理临时集合中的对象然后发送sql语句。

当主键的生成方式为native时,当执行Session.save()方法时就会调用Session.flush();方法。

 

一对多映射关系模型心得

一对多由一的一端来维护多的一端表示一的字段,多的一端表示一的字段可以为空,当创建表时,一的一端会在多的一端加上一个表示一的字段。一的一端会根据自身带有多的一端的引用找到多的一端的维护字段进行填充,然后更新,查询的时候也会根据配置文件将查询到的多的一端的数据填充到对象模型,并返回一个装有对象模型的Set集合。

使用一对多双向的作用是让多的一端维护多的一端的字段,并且也可以由一的一端查询到多的一端。

要使哪一端维护首先这一端要能使该字段可见并且能修改,而且维护的那一端生成相应的字段。

要使一的一端维护失效只需要在<set>标签中将属性inverse改为true即可。

 

 

7:主键生成策略

Native:表示从0开始生成

Uuid表示生成一个32位的数据

Sequence: 表示生成的id即使在不同的表中仍然连接着上一个表的数据生成

 

 

 

编写测试类

1:首先测试类以XXTest开头并且继承TestCase

2:编写测试方法的方法头必须以test开头,修饰符为public,无参数,无返回类型。

0 0
原创粉丝点击