-
Hibernate 关联关系
单向关联:例如物品和用户构建单向关系,则可以通过用户查看物品,去不能通过物品查看用户。
双向关联:两者之间可以互相访问。
关系可以分为:单向1-N,单向N-1,单向N-N,单向1-1;双向1-1,双向1-N,双向N-N。 -
单向N-1关联
1的一方需要有一个Set集合类型是的N的一方,而且还需要在N的一方的关系映射文件中添加:
<!-- name(该映射文件类中的属性名) class(该映射文件中属性名对应的类的完整地址) column(在数据库中的列名) cascade(级联操作) -->
<many-to-one name="wm_f_wt_id" class="WorkType" column="wt_f_id" cascade="save-update"></many-to-one>
- 单向1-N关联
1的一方还是需要一个Set集合类型是N的一方,1的一方的映射文件中需要添加
<!-- name(该映射文件的类中的属性名) -->
<set name="">
<!-- column(该类中的列名,外键名) -->
<key column=""/>
<!-- class(N方完整的类名) -->
<one-to-many class=""/>
</set>
-
双向1-N关联
1的一方需要有Set集合类型是N的一方,映射文件中需要添加单向1-N中1的要添加的内容;N的一方需要有1的对象 并且需要在N的映射文件中添加1-N中N的映射文件中需要添加的内容。
-
基于外键的1-1关联
基于外键的单向1-1在POJO类中的代码的编写方式可以参考单向的N-1,因为N的一端或1的一段都是直接访问关联的实体。对于映射配置,两者也是类似的,只不过是基于外键的单向1-1需要在原有的<many-to-one>
元素中设置unique属性为true,用以表示N的一端必须唯一,通过在N的一段添加约束的方法,将单向N-1变成等同于外键的单向1-1关联关系。
-
基于主键的单向1-1关联
需要在映射文件中添加<one-to-one name="" class="" constrained="true"/>
(name 该类中属性的名称,class该属性对应的类的完整的类名 constrained需要置成true)
-
基于外键的双向1-1关联
像上面的基于外键的单向1-1关联相似,需要在一个类的映射文件中添加<many-to-one>
并且还是需要添加一个unique=“true”属性在另一个类的映射文件中添加<one-to-one >
这样的话添加<many-to-one>
的类所创建的表就变成了从表。
-
基于主键的双向1-1关联
和基于主键的单向1-1相似,只不过是在另一个需要关联的映射文件中也添加了<one-to-one>
从而建立了一对一关联关系。
- 单向N-N
在主关联类中有Set集合类型是对方的类型,然后都需要在其映射文件中添加:
<!-- name(该类中的属性) table(中间表名) cascade(级联类型)-->
<set name="roles" table="sys_user_role" cascade="save-update" >
<!-- 创建表的外键名 -->
<key column="user_id" ></key>
<!-- class(对方的完整类名) column(对方的外键列名) -->
<many-to-many class="Role" column="role_id" ></many-to-many>
</set>
- 双向N-N关联
和单向N-N关联相似,只不过是在每个类中都进行了单向N-N关联中的操作。也可以分成两单向1-N关联,中间表为1,两表为N.
属性名|描述
- | :
cascade|级联操作:save-update 级联保存更新;deleted 级联删除;all 级联保存更新删除。只推荐使用sace-update
fetch|抓取策略可以是join(外连接)和select(选择)两值之一
lazy|指定关联实体的延迟加载特性 - HQL检索
是一种面向对象的查询语言。它所操作的对象都是类、对象、属性等。select wm_name from WorkMessage where wm_id='10'group by wm_type order by wm_id desc
把WorkMessage信息以wm_type分组之后按wm_id增加的方式排序,获得wm_id=10的wm_name;
Query接口的方法及描述
方法名 | 描述 |
---|---|
int executeUpdate() | 执行更新删除等操作之后,返回受影响的记录数 |
Iterator iterate() | 返回一个Iterator对象,用户迭代查询的结果集。使用该方法时,首先要检索ID字段,然后根据ID字段到Hibernate的一级和二级缓存中查询匹配的对象,如果存在就直接放到结果集中,如果不存在则执行select 查询数据库放到结果集中,该方法比list()的性能要高。 |
List list() | 返回的结果以list的形式 |
Query setFirstResult(int first) | 设定开始检索的起始位置,参数first表示对象的查询结果中的索引位置,索引位置的起始值为0,默认情况下Query接口从索引位置为0的对象开始检索 |
Query setMaxResult(int max) | 设置一次最多的检出数目,默认情况下是所有的对象,和setFirstResult一起使用可以实现分页效果 |
Object uniqueResult() | 返回单个对象,如果没有查询到则返回null |
Query setParameter(String name,Object val) | 用于绑定任意类型的参数。 |
如果对您有用希望点个赞,若是哪里有写的不好的请及时留言,在您的帮助下会多写出更好的总结,谢谢。