• 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类型

  • 相关阅读:
    常用的SQL优化
    mysql索引详细介绍
    作业2
    作业1
    python学习笔记(11)文件操作
    python学习笔记(10)函数(二)
    python学习笔记(9)函数(一)
    C#的dictionary使用总结
    常用的类型转化
    我的动态库“情节”
  • 原文地址:https://www.cnblogs.com/core404/p/5854829.html
Copyright © 2020-2023  润新知