经过前段时间的学习,hibernate的映射关系尤其重要,须要理解的也有挺多的。数据库
1、一对一映射学习
1)主键关联。一对一默认使用的是当即加载,若是须要时用延迟加载,那么须要在one-to-one元素中将constrained属性设为true,而且将待加载的一方的class元素中的lazy属性设为true(或者不去设置,由于该属性默认值就是true)。一对一加载默认使用左外链接,能够经过修改fetch属性为select修改为每次发送一条select语句的形式。fetch
2)外键关联。本质上一对多的蜕变形式。在many-to-one元素中增长unique=”true”属性就变成了一对一。spa
3、map与set 标签中的element子标签映射的是原子类型(string,date,int,long….),即可以直接映射到数据库表字段上的类型,而one-to-many映射的则是实体类型,指的是没法映射到表的字段,而是要映射到整张表的类型。hibernate
4、Bag(结合了List与Set),能够重复且没有顺序的一种集合,是Hibernate提供的。对象
5、查询排序(内存排序及数据库排序)排序
6、数据库排序使用order-by属性。继承
7、内存排序使用sort属性,它有两个属性值(unsorted,natural),其中的natural指的是按照天然的升序排序。第三个属性值是咱们本身定义的排序规则类。接口
8、内存排序:有两个属性值能够直接使用,分别是unsorted(不排序)以及natural(天然排序,即升序),此外,咱们还能够自定义排序规则,方式是定义一个类,让其实现Comparator接口,而且实现该接口中的compare方法,在该方法中实现排序规则便可。而后将该自定义排序规则的类名做为sort的属性便可。内存
9、联合组建的映射规则
1)类中的每一个主键属性都对应到数据表中的每一个主键列。Hibernate要求具备 联合主键的实体类实现Serializable接口,而且重写hashCode与equals方法,重写这两个方法的缘由在于hibernate要根据数据库的联合主键来判断两行记录是不是同样的,若是同样那么就认为是同一的对象。这反映到程序领域中就是根据hashCode与equals方法来判断某两个对象是否能都放到诸如Set这样的集合当中。 联合主键的实体实现Serializable接口的缘由在于使用get 或load方法的时候须要先构建出来该实体的对象,而且将查询依据(联合主键)设置进去,而后做为get或load方法的第二个参数传进去便可。
2)将主键所对应属性提取出一个类(称之为主键类),而且主键类须要实现Serializable接口,重写equals方法与hashCode方法,缘由与上面同样。
10、继承映射
1)每一个子类一张表
2)一张表存储继承体系中全部类的信息(数据库表其实是继承体系中全部类的属性并集所构成的字段)
须要在hbm文件中增长以下一行:
<discriminator column="personType" type="string"></discriminator>
3)公共信息放在父类表中,独有信息放在子类表中,每个子类对应一张表。