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"/>