1. 程式人生 > >2、Hibernate 實體類對映(兩種形式)

2、Hibernate 實體類對映(兩種形式)

一、註解配置

    介紹

           @註解配置中,實體類用@Entity註解,用@Table指定對應的資料表,用@Id配置主鍵,用@Column配置普通屬性,用@OneToMany、@ManyToOne、@OneToOne、@ManyToMany配置實體間的關係等。

    舉例

  Cat.java

package com.lhj.bean;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "tb_cat")
public class Cat1 {
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    
    @Column(name = "name")
    private String name;
    
    @Column(name = "description")
    private String description;
    
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "createDate")
    private Date createDate;

    //get、set方法略
    }

}

    主鍵對映

            配置主鍵    Hibernate中用@Id宣告該列為主鍵,同時用@Column宣告該列的列名。(當列名與屬性名相同時,@Column配置可以省略)。@GeneratedValue用於指定主鍵的生成策略。

            主鍵生成規則    @註解支援四種生成規則:GenerationType.AUTO、GenerationType.TABLE、GenerationType.SEQUENCE、GenerationType.IDENTITY

  • GenerationType.AUTO: 自動生成,根據底層資料庫自動選擇
  • GenerationType.TABLE:  使用指定的表來決定主鍵的取值,一般結合@TableGenerator使用  

             @Id

             @TableGenerator(name = "tb_cat_gen", allocationSize = 1)

             @GeneratedValue(strategy = GenerationType.TABLE, generator = "tb_cat_gen")

             private Integer id;

  • GenerationType.SEQUENCE:使用Sequence來決定

  • GenerationType.IDENTITY

     普通屬性對映

             配置普通屬性    普通屬性使用@Column 與 @Basic配置。可以省略

                     @Column 中可指定nullable(是否允許為空)、unique(是否唯一)、insertable(是否允許插入)、updatable(是否允許更新)、length(列長度)、columnDefinition(列型別)、sale(整數長度)、precision(小數點精度)等。如果屬性名與對應的列名一直,@Column可以省略

                     @Basic 可為普通屬性配置的載入方式,預設為及時載入。optional配置該列是否可為null,如果為true表示該屬性可選的,可為null。

     日期屬性的配置

              配置日期屬性 如果日期屬性是java.util.Date型別的,必須要用@Temporal配置日期型別,取值可為 Date(只有年月日等日期資訊)、Time(只有時分秒等時間資訊)或者Timestemp(既有日期資訊,又有時間資訊)

                  @Temporal(TemporalType.TIMESTAMP)

                  @Column(name = "createDate")

                  private java.util.Date createDate;

     配置到 hibernate.cfg.xml 中

                  <mapping class="com.lhj.bean.***"/>

二、xml配置

     介紹

           多個實體類可以配置在一個XML檔案中。Hibernate推薦用一個同名的XML檔案配置一個實體類,便於閱讀和維護。XML檔案一般以".hbm.xml"結尾,便於辨認,也可以直接用”.xml“結尾。

     舉例

                                                                                                  Cat.hbm.xml

                   <?xml version = "1.0"?>

                   <!DOCTYPE hibernate-mapping PUBLIC

                                       "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

                                       "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

                   <hibernate-mapping package="com.lhj.bean">

                            <class name="Cat" table="cat">

                                     <id name="id" column="id">

                                             <generator class="native" />

                                     </id>

                                    <property name="name" type="String" column="name" ></property>

                                    <property name="description" type="text" ></property>

                                    <property name="createDate" type="timestamp" ></property>

                            </class>

                   </hibernate-mapping>

    主鍵對映

            配置主鍵   主鍵用<id />配置,name指定實體類的主鍵屬性,column指定資料表中的主鍵列名。使用巢狀的<generator />配置主鍵的生成策略,native表示使用資料庫自己的策略。

            主鍵生成規則   

  • native: 取決於資料庫,相當於GenerationType.AUTO
  • indentity:使用indentity,相當於GenerationType.IDENTITY
  • sequence:  相當於使用GenerationType.SEQUENCE

             <id name="id" type="long" column="person_id">

                        <generator class="sequence">

                              <param name="sequence">person_id_sequence</param>

                        </generator>

                   </id>

  • increment:自增長型別,由Hibernate而不是資料庫維護

  • hilo: hi/low演算法,使用指定的表給主鍵賦值

                  <id name="id" type="long" column="cat_id">

                        <generator class="hilo">

                            <param name="table">hi_value</param>

                            <param name="column">next_value</param>

                            <param name="max_lo">100</param>

                        </generator>

                  </id>

  • seqhilo: 基於sequence的hilo演算法
  • uuid
  • guid
  • assigned:預設值,不使用任何策略,在儲存進資料庫之前必須使用setter方法賦值
  • select:使用資料庫觸發器賦值
  • foreign:使用外來鍵賦值。

     普通屬性對映

             配置普通屬性    xml中使用<property />標籤配置普通屬性。type屬性指定列型別,相當於@Column中的columnDefinition。

                 <property name="salary" precision="2" scale="10" length="255" column="salary" type="String" update="true" insert="true" lazy="false" unique="false" not-null="false">

                 </property>

     日期屬性的配置

              配置日期屬性在type屬性中指定日期型別即可,取值可以為date、time、timestamp

                  <property name="createDate" type="timestamp"></property>

     配置到 hibernate.cfg.xml 中

                  <mapping resource="com/lhj/bean/***.hbm.xml"/>