首页 > 代码库 > Hibernate缓存、组件、继承映射

Hibernate缓存、组件、继承映射

Hibernate缓存、组件、继承映射

三种状态:

临时状态:不受session管理,没有提交到数据库;没有执行sql之前,new对象的时候;

持久化状态:受session管理,提交到数据库;正在执行sql

游离状态:不受session管理,提交到数据库;session关闭后

 

Cache缓存:会先看看缓存里有没有,有就取出来,没有就到数据库取数据。

Session的三个方法:flush、evict、clear

 

不同session不会共享数据。

 

List与iterator的区别:

List是直接到数据库进行查询,也会放到缓存,但是不会到缓存取数据;

Iterator是到数据库取数据也放到缓存,会到缓存取数据。

 

Get和load的区别:

Get是及时查询,直接一个select出来;

Load默认是懒加载,使用到数据的时候才会到数据库取数据。会先到数据库取主键,然后根据主键一个一个遍历。

 

Lazy=true、false、extra(真正使用到数据的时候才回到数据库取数据,像isEmpty、size都不会到数据库取数据)

 

一对一映射:

<generator class=”foreign”>

<param name=”property”>引用的对象</

 

<id name="user_id">

                            <!--

                                     id 节点指定的是主键映射, 即user_id是主键

                                     主键生成方式: foreign  即把别的表的主键作为当前表的主键;

                                                        property (关键字不能修改)指定引用的对象     对象的全名 cn..User、  对象映射 cn.User.hbm.xml、   table(id)

                             -->

                            <generator class="foreign">

                                     <param name="property">user</param>

                            </generator>

                   </id>        

<!--

                            一对一映射,有外键方

                            (基于主键的映射)

                             constrained="true"  指定在主键上添加外键约束

                    -->

                   <one-to-one name="user" class="User" constrained="true"  cascade="save-update"></one-to-one>

 

组件映射

<!-- 组件映射 -->

                   <component name="wheel">

                            <property name="size"></property>

                            <property name="count"></property>

                   </component>

继承关系的映射

简单映射:

         可以直接使用父类的属性;

         获取时候注意:当写hql查询的使用,通过父类查询必须写上类的全名

每个类都对应一张表:(包括父类在内)

         每个子类都这么写:

         <joined-subclass name="Cat" table="t_cat">

                            <key column="t_animal_id"></key>

                            <property name="catchMouse"></property>

                   </joined-subclass>

每个类都对应一张表:(包括父类不在内)

需要将父类:abstract=”true” <class name="Animal" abstract="true">

abstract="true"  指定实体类对象不对应表,即在数据库段不生成表

 

<union-subclass name="Cat" table="t_cat">

                            <property name="catchMouse"></property>

                   </union-subclass>

注意:主键不能是自增长!可以用uuid,父类id要为String类型

Hibernate缓存、组件、继承映射