三种方式:
    持久化注解   目前开发主流方式
    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. /usr/bin/ld: cannot find *** 的处理

    /usr/bin/ld: cannot find *** 的处理

  2. JavaFX 3D部分介绍(3) Lights

    声明:   本博客文章原创类别的均为个人原创,版权所有.转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com. ...

  3. 捕获 PHP 致命错误 Fatal Errors

    register_shutdown_function()函数都将会你的程序执行完后执行,无论你的程是否运行正常. 所以,在这个函数前执行任何操作我们都要检查是否真的有致命错误出现.如果出现致命错误,我 ...

  4. IO(Input Output)流__字节流

    续: ------->>>>字节流 IntputStream  OutputStream 需求:想要操作图片数据,就需要用到字节流. 读写操作: FileOutputStrea ...

  5. IIS- ASP站点布署时查看ASP错误信息

    ASP使用的脚本是VBSCRIPT,布置的时候想显示他的错误信息,可以在INTERNET选项里把显示友好http错误信息的勾去掉 就能查看ASP布署时查看错误信息的勾去掉.

  6. python实战--Http代理服务器

    打算好好深入研究下pytho的socket编程,那天看了这篇博文,http://www.apprk.com/archives/146,于是打算学习下,仿写了一下,发现写好还真不容易,中途出现很多问题, ...

  7. angularjs开发常见问题-1(持续更新中...)

    angularJs中学习中- 1.刷新当前页面数据:$state.reload service.create(data).then(function (newItem) { flash.success ...

  8. c# 请问如何将四个RadioButton分成两组?

    WinForm 只要放在同一个容器中的RadioButton 就自动互斥 创建两个panel容器,分别放两个RadioButton 就是两组了

  9. float与double的范围和精度(摘录)

    什么是浮点数在计算机系统的发展过程中,曾经提出过多种方法表达实数.典型的比如相对于浮点数的定点数(Fixed Point Number).在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置. ...

  10. Java基础知识强化之IO流笔记34:OutputStreamWriter(Writer字符流的子类)5种write数据方式

    1. OutputStreamWriter (转换流) OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节. 同时OutputS ...