三种方式:
    持久化注解   目前开发主流方式
    XML配置描述文件(XML deployment descriptor,可以让Hibernate的PO类与JPA实体类兼容,实际中很少用)
    传统的XML映射文件(*.hbm.xml)

映射类
    @Entity
    @Table{
                    name
                    catalog
                    indexes
                    schema
                    uniqueConstraints
                 }
    @Index
    @Proxy
    @DynamicInsert
    @DynamicUpdate
    @SelectBeforeUpdate
    @PolymorphismType
    @Where
    @BatchSize
    @OptimisticLocking
    @Check
    @Subselect

映射属性
    @Column{
                        columnDefinition
                        insertable
                        length
                        name
                        nullable
                        precision
                        scale
                        table
                        unique
                        updatable
                     }
    @Formula{
                        注意:1、value="(sql)"的英文括号不能少
                                  2、如果需要在value属性中使用参数,则直接使用where cur.id =  currencyID形式
                        eg.:@Formula("(select concat(nt.title,nt.content)"+"from news_inf nt where nt.id = id)")
                      }
    @Generated{
                            当Hibernate执行一条insert(当@Generated的value为INSERT或ALWAYS时)
                            或update(当@Generated的value为ALWAYS时)时,Hibernate会立即执行一条
                            select语句来获取该数据列的值,并将该值赋给该持久化对象的该属性。
                            可以和触发器一起使用,生成某个属性的值。
                         }
    @Transient{
                         修饰不想持久保存的属性,生成的sql中不会有这列的插入
                        }
    @Enumerated{
                                修饰枚举类型的属性
                                当其value属性为EnumType.STRING时,底层数据库保存枚举值的名称;
                                当其value属性为EnumType.ORDINAL时,底层数据库保存枚举值的序号;
                            }
    @Lob{    
                  当持久化类的属性为byte[]、Byte[]或java.io.Serializable类型时,@Lob修饰的属性将映射为底层的
                  Blob列;
                  当、、、、、、、、char[]、Character[]或java.lang.String时,、、、、、、、、、、、、、、、、
                  Clob列。
              }
    @Basic在@Lob的基础上加了延迟加载,加载对象时,并不立即加载pic属性,而是加载一个“虚拟”代理。
    @Basic{
                    fetch{
                                FetchType.EAGER 立即加载
                                FetchType.LAZY   延迟加载
                             }
                    optional 是否允许使用null值
                }
    @Temporal{
                           TemporalType.DATE
                           TemporalType.TIME
                           TemporalType.TIMESTAMP
                        }

映射主键
    @GeneratedValue{
                                    strategy{
                                                     GenerationType.AUTO(默认值)
                                                     GenerationType.IDENTITY
                                                     GenerationType.SEQUENCE(要与 @SequenceGenerator一起使用)
                                                     GenerationType.TABLE(要与@TableGenerator一起使用)
                                                  }
                                    generator   指定@SequenceGenerator或@TableGenerator的名称                                
                                   }
    @SequenceGenerator{
                                            name
                                            allocationSize
                                            catalog
                                            schema
                                            initialValue
                                            sequenceName
                                        }

  @TableGenerator{ 
                                    name
                                    allocationSize
                                    catalog
                                    schema
                                    initialValue
                                    sequenceName
                                eg.:
                                       @TableGenerator(name="newsGen" ,           
                                        table="NEWS_ID_GEN",pkColumnName="gen_key",
                                        valueColumnName="gen_value",
                                        pkColumnValue="news_id"
                                        )
                                        @GeneratedValue(strategy=GenerationType.TABLE ,
                                         generator="newsGen")
                                }      
 
Hibernate主键生成策略    
    使用@GenericGenerator来使用Hibernate提供的主键生成策略
    @GenericGenerator{
                                        name
                                        strategy{
                                                        increment
                                                        identity
                                                        sequence
                                                        hilo
                                                        seqhilo
                                                        uuid
                                                        guid
                                                        native
                                                        assigned
                                                        select
                                                        foreign
                                                      }
                                     }

映射集合属性
注意:要求持久化集合字段必须声明为接口,两个持久化对象不能共享同一个集合元素的引用。

映射集合属性 
@ElementCollection{
                                        fetch
                                        targetClass    
                                  }
 
映射集合属性表
@CollectionTable{
                                  name
                                  catalog
                                  schema
                                  indexes
                                  joinColumns
                                  uniqueConstraints
                             }
 
@JoinColumn{
                              columnDefinition
                              name
                              insertable
                              updatable
                              nullable
                              table
                              unique
                              referencedColumnName
                       }
 
@Column
 
索引列
@OrderColumn
@MapKeyColumn
 
    List集合属性
        示例代码:
            // 集合属性,保留该对象关联的学校
            @ElementCollection(targetClass=String.class)
            // 映射保存集合属性的表
            @CollectionTable(name="school_inf",
                        joinColumns=@JoinColumn(name="person_id",nullable=false))
 
            // 指定保存集合元素的列为 school_name
            @Column(name="school_name")
            // 映射集合元素索引的列
            @OrderColumn(name="list_order")
        private List<String> schools = new ArrayList<>();
    
    数组几乎与List集合一样
 
    Set集合属性   
           没有索引
     示例代码:
         @ElementCollection(targetClass=String.class)
           // 映射保存集合属性的表
          @CollectionTable(name="school_inf",
                         joinColumns=@JoinColumn(name="person_id",nullable=false))
 
          // 指定保存集合元素的列为 school_name
         @Column(name="school_name",
                nullable=false)
          private Set<String> schools = new HashSet<>();
 
Map集合属性
      索引列用@MapKeyColumn映射
   示例代码:
        // 集合属性,保留该对象关联的成绩
            @ElementCollection(targetClass=Float.class)
            // 映射保存集合属性的表
            @CollectionTable(name="score_inf",
                        joinColumns=@JoinColumn(name="person_id",nullable=false))
            @MapKeyColumn(name="subject_name")
            //指定Map key的类型为String
            @MapKeyClass(String.class)
            // 指定保存集合元素的列为 school_name
            @Column(name="mark")
        private Map<String , Float> score = new HashMap<>();
 
有序集合映射(SortedSet、SortedMap)
   @SortNatural 
   @SortComparator
   @OrderBy
    示例代码:
    // 有序集合属性
        @ElementCollection(targetClass=String.class)
        // 映射保存集合元素的表
        @CollectionTable(name="training_inf",
        joinColumns=@JoinColumn(name="person_id" , nullable=false))
        // 定义保存集合元素的数据列
        @Column(name="training_name" , nullable=false)
        // 使用@SortNatural指定使用自然排序
        @SortNatural
        private SortedSet<String> trainings
            = new TreeSet<>();

映射数据库对象
    两种方式:1、在映射文件中显示声明create和drop命令
                     2、提供一个实现了org.hibernate.mapping.AuxiliaryDatabaseObject的类,这个类知道如何组织create和drop命令。
                注:为让Hibernate根据<database-object../>创建数据表,要将Hibernate配置文件里的hbm2ddl.auto属性值改成create
    1:<hibernate-mapping>
                ...... 
               <database-object>
                    <create>create trigger tri ...</create>
                    <drop>create trigger tri</drop>
               </database-object>
          </hibernate-mapping>
 
    2:<hibernate-mapping>
                ...... 
               <database-object>
                    <definition class="MyTriggerDefinition"/> 
               </database-object>
          </hibernate-mapping>
   3、指定某些数据库对象仅在特定的方言中才可使用
    3:<hibernate-mapping>
                ...... 
               <database-object>
                    <create>create table test(t_name varchar(255));</create>
                    <drop></drop>
                    <dialect-scope name="org.hibernate.dialect.MySQL5Dialect" />
                    <dialect-scope name="org.hibernate.dialect.MySQL5InnoDBDialect" />
               </database-object>
          </hibernate-mapping>
SchemaExport工具--->根据映射文件来生成数据库对象(使用这个生成数据库对象时,无须将hbm2ddl.auto属性值改为create,使用update也行)
    Configuration conf = new Configuration().configure();
   //创建SchemaExport对象
    SchemaExport se = new SchemaExport(conf);
   //设置输出格式良好的SQL脚本
    se.setFormat(true)
        //设置保存SQL脚本的文件名
        .setOutputFile("new.sql")
        //输出SQL脚本,并执行
        .create(true,true);
 
也可以直接使用java命令来解释、执行该工具类,命令格式如下:
    java -cp hibernate_classpaths org.hibernate.tool.hbm2ddl.SchemaExport options mapping_files

组件属性
    @Embeddable修饰组件类
    组件类里可以加@parent

hibernate映射的更多相关文章

  1. hibernate映射文件

    Hibernate的持久化类和关系数据库之间的映射通常是用一个XML文档来定义的.该文档通过一系列XML元素的配置,来将持久化类与数据库表之间建立起一一映射.这意味着映射文档是按照持久化类的定义来创建 ...

  2. Hibernate映射文件如何配置触发器

    Hibernate映射文件之触发器生成(generated属性.database-object元素) (2013-02-27 12:28:49) 转载▼ 标签: it 分类: JAVA学习笔记 这里分 ...

  3. Spring集成Hibernate映射文件的4种方式

    概要: 在Spring的applicationContext.xml中集成Hibernate映射文件,通常是在<sessionFactory>这个Bean实例中进行的,若配置的映射文件较少 ...

  4. hibernate映射的 关联关系:有 一对多关联关系,一对一关联关系,多对多关联关系,继承关系

    hibernate环境配置:导包.... 单向n-1:单向 n-1 关联只需从 n 的一端可以访问 1 的一端 <many-to-one> 元素来映射组成关系: name: 设定待映射的持 ...

  5. Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:

    Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长: 通过Hibernate注解的方式映射oracel数据库的sequence主键生成器 ...

  6. oracle ORA-01747(系统保留关键字)user.table.column, table.column 或列说明无效 hibernate映射oracle保留关键字

    1.查询系统关键 select * from v$reserved_words 确认你使用的是否为关键字: select * from v$reserved_words w where w.KEYWO ...

  7. Hibernate映射类型对照表

    Hibernate映射类型对照表 java类型  Hibernate映射类型  SQL类型 java.math.BigDecimal big_decimal numeric byte[] binary ...

  8. 02.Hibernate映射基础

    前言:Hibernate的核心功能是根据数据库到实体类的映射,自动从数据库绑定数据到实体类.使我们操作实体类(Java对象)就能对数据库进行增.删.查.改,而不用调用JDBC API使数据操作变得简单 ...

  9. hibernate Java 时间和日期类型的 Hibernate 映射

    基础知识: 在 Java 中, 代表时间和日期的类型包含: java.util.Date 和 java.util.Calendar. 此外, 在 JDBC API 中还提供了 3 个扩展了 java. ...

  10. [转]Hibernate映射的基本操作

       ++YONG原创,转载请注明http://blog.csdn.net/qjyong/article/details/1829672          Hibernate映射主要是通过对象关系映射 ...

随机推荐

  1. [LeetCode] 76. Minimum Window Substring 解题思路

    Given a string S and a string T, find the minimum window in S which will contain all the characters ...

  2. PAT 1076. Forwards on Weibo (30)

    Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and may ...

  3. 【JAVA - SSM】之MyBatis插入数据后获取自增主键

    很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作.针对这个问题,有两种解决方案: (1)先插入,后查询.我们可以先插入一条数据,然后根据插入的数据的各个字段 ...

  4. Unity EditorWindow 笔记

    一:功能 1.实例化 //设置插件在菜单栏的位置 和快捷键 [MenuItem("YCC's Tools/模型更改/更改父物体和测量长度 %W")] //实例化窗体 static ...

  5. 关于android各种双卡手机获取imei,imsi的处理(mtk,展讯,高通等)

    目前国内对于双卡智能手机的需求还是很大的,各种复杂的业务会涉及到双卡模块:而android标准的api又不提供对双卡的支持.导致国内双卡模块标准混乱,各个厂商各玩各的.目前我知道的双卡解决方案就有:m ...

  6. IO负载高的来源定位 IO系列

    http://elf8848.iteye.com/category/281637 前言: 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的util),但是无法快速的定位到 ...

  7. careercup-链表 2.5

    2.5 给定两个用链表表示的整数,每个结点包含一个数位.这些数位是反向存放的,也就是个位排在链表首部.编写函数对这两个整数求和,并用链表形式返回结果. 示例: 输入: (7->1->6)+ ...

  8. (转载)Eclipse下配置Github环境 .

    总的参考文档:EGit User Guide http://wiki.eclipse.org/EGit/User_Guide Address: http://www.linuxidc.com/Linu ...

  9. xhEditor与Java结合使用

    xhEditor是一个轻量级的html编辑器,使用它可以非常方便的编辑图文内容,然而官方文档中只有php的演示,没有Java版的,最近两天参考网上各种各样的文档,琢磨了一下用法,现已可以正常运行,现在 ...

  10. 浮动闭合方案:clearfix

    1 ;clear:both;visibility:hidden} .clearfix{*+height:1%;} 2 .clearfix{overflow:auto;_height:1%} 3 ;}