Hibernate的学习笔记(4)

通过前段时间的学习,hibernate的映射关系尤为重要,需要理解的也有挺多的。

1、一对一映射

  1)主键关联。一对一默认使用的是立即加载,如果需要时用延迟加载,那么需要在one-to-one元素中将constrained属性设为true,并且将待加载的一方的class元素中的lazy属性设为true(或者不去设置,因为该属性默认值就是true)。一对一加载默认使用左外连接,可以通过修改fetch属性为select修改成每次发送一条select语句的形式。

  2)外键关联。本质上一对多的蜕变形式。在many-to-one元素中增加unique=”true”属性就变成了一对一。

3、map与set 标签中的element子标签映射的是原子类型(string,date,int,long….),即能够直接映射到数据库表字段上的类型,而one-to-many映射的则是实体类型,指的是无法映射到表的字段,而是要映射到整张表的类型。

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方法的时候需要先构建出来该实体的对象,并且将查询依据(联合主键)设置进去,然后作为getload方法的第二个参数传进去即可。

2)将主键所对应属性提取出一个类(称之为主键类),并且主键类需要实现Serializable接口,重写equals方法与hashCode方法,原因与上面一样。

10、继承映射

1)每个子类一张表

2)一张表存储继承体系中所有类的信息(数据库表实际上是继承体系中所有类的属性并集所构成的字段

      

需要在hbm文件中增加如下一行:

<discriminator column="personType" type="string"></discriminator>

   3)公共信息放在父类表中,独有信息放在子类表中,每一个子类对应一张表。  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值