1. 程式人生 > >hibernate5(4)實體對映註解配置[1]註解全面解析

hibernate5(4)實體對映註解配置[1]註解全面解析

相對於經典風格的實體配置xxx.hbm.xml,新版本hibernate使用JPA(Java Persistence API)註解配置能使我們的開發更加敏捷便利.在本系列前面部分的文章中,我們圍繞JPA註解風格配置來逐步深入學習。

配置例項

下面先看一個實體類的配置例項:

package com.zeng.model;

import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import
javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Lob; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; @Entity//聲明當前類為hibernate對映到資料庫中的實體類
@Table(name = "t_article2",catalog = "catolog",schema = "schema",uniqueConstraints = {@UniqueConstraint(columnNames = {"title","content"})}) //通過 @Table 為實體Bean指定對應資料庫表,目錄和schema的名字 //@UniqueConstraints 可以定義表的唯一約束。在title,和content加上唯一約束 public class User { @Id//宣告此列為主鍵,作為對映物件的識別符號 /** * @GeneratedValue
註解來定義生成策略 * GenerationType.TABLES 當前主鍵的值單獨儲存到一個數據庫的表中 * GenerationType.SEQUENCE 利用底層資料庫提供的序列生成識別符號 * GenerationType.IDENTITY 採取資料庫的自增策略 * GenerationType.AUTO 根據不同資料庫自動選擇合適的id生成方案,這裡使用mysql,為遞增型 */
@GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Column(insertable = true,length = 20,nullable = false,name = "user_name",unique = true,updatable = true) @Version //註解用於支援樂觀鎖版本控制。 private String name; @Column(scale = 1,precision = 1) private Double salary; /** * @Basic 基本屬性型別對映,註解於非Static 非transient的屬性, * 這時候我們可以為其宣告抓取策略等屬性 * fetch: 獲取策略,當以session.get()方法獲取資料庫物件時: * fetchType.LAZY為懶載入,會在第一次使用該屬性(如呼叫getAge()方法)時才獲取。 * FetchType.EAGER為即時載入。 * optional:表示當前屬性是否可選,預設為true,如果為false,則在持久化到資料庫時,如果此屬性為null,則會失敗 */ @Basic(fetch = FetchType.EAGER,optional = true) private Integer age; @Transient//被標註此註解的屬性不會被持久化到資料庫 private String temp; /** * @Lob 註解表示屬性將被持久化為Blob或者Clob型別, * 具體取決於屬性的型別, java.sql.Clob, Character[], char[] 和 java.lang.String這些型別的屬性都被持久化為Clob型別, * 而java.sql.Blob, Byte[], byte[] 和 serializable型別則被持久化為Blob型別. */ @Lob private String desc; /** * @Temporal 標註在日期等屬性上,宣告對映為資料庫的特定誒其屬性型別,預設為java.sql.Timestamp(TemporalType.TIMESTAMP) * 此外還有java.sql.date(TemporalType.DATE)、java.sql.Time(TemporalType.TIME) */ @Temporal(TemporalType.TIME) private Date birthDate; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }

在例項中,我們使用了一些常用的註解屬性,並配上註釋進行了細緻說明

拓展分析

除了上面註釋的說明,我們還需要補充的說明是

1. @Column常用屬性解析

屬性名 說明 預設值
unique 可選,是否在該列上設定唯一約束 false
nullable 可選,是否設定該列的值可以為空 false
insertable 可選,該列是否作為生成的insert語句中的一個列 true
updatable 可選,該列是否作為生成的update語句中的一個列 true
columnDefinition 可選: 為這個特定列覆蓋SQL DDL片段 (這可能導致無法在不同資料庫間移植)比如我們想把Integer readNum 設為預設0,可使用此屬性: INT DEFAULT 0
table 可選,定義對應的表 預設為當前類對應表
length 可選,列長度 255
precision 可選,列十進位制精度(decimal precision) 0
scale 可選,如果列十進位制數值範圍(decimal scale)可用,在此設定 0

如果某屬性沒有註解,該屬性將遵守下面的規則:
1. 如果屬性為單一型別,則對映為@Basic
2. 如果屬性對應的型別實現了Serializable, 則屬性被對映為@Basic並在一個列中儲存該物件的serialized版本
3. 如果該屬性的型別為java.sql.Clob 或 java.sql.Blob,則作為@Lob並對映到適當的LobType。

2. @Lob註解屬性

對於一些容量大的屬性如文章、圖片的資料,如果我們要儲存到資料庫,可以使用@Lob註解,先在User類中新增下面一個屬性例項:

@Lob
private String text;
@Lob
private Byte[] image;

這時候,我們執行測試方法,hibernate會自動幫我們在資料庫中生成相應的”大容量型別“屬性:

Field Type Null Default
image longblob YES NULL
text longtext YES NULL

如果我們想自定製資料庫中生成的屬性型別,可以使用下面示例配置:

@Lob
@Basic(fetch = FetchType.LAZY)
@Column(columnDefinition = "BLOB", nullable = true)
private String pro1;

@Lob
@Basic(fetch = FetchType.LAZY)
@Column(columnDefinition = "tinytext", nullable = true)
private String pro2;

@Lob
@Basic(fetch = FetchType.LAZY)
@Column(columnDefinition = "mediumtext", nullable = true)
private String pro3;

@Lob
@Basic(fetch = FetchType.LAZY)
@Column(columnDefinition = "text", nullable = true)
private String pro4;

此時對應資料庫中生成資料型別:

Field Type Null Default
pro1 blob YES NULL
pro2 tinytext YES NULL
pro3 mediumtext YES NULL
pro4 text YES NULL

資料型別對應關係

java、mysql、hibernate資料型別對應關係如下表所示:
這裡寫圖片描述

原始碼下載

相關推薦

hibernate5(4)實體對映註解配置[1]註解全面解析

相對於經典風格的實體配置xxx.hbm.xml,新版本hibernate使用JPA(Java Persistence API)註解配置能使我們的開發更加敏捷便利.在本系列前面部分的文章中,我們圍繞JPA註解風格配置來逐步深入學習。 配置例項 下面先看一個

hibernate5(5)實體對映註解配置[2]主鍵生成策略

@GeneratedValue基本註解型別 在上一篇文章中,我們講到了JPA使用@GeneratedValue註解來定義生成策略,而關於註解生成策略有4種基本支援型別: 1. GenerationType.TABLES 當前主鍵的值單獨儲存到一個數據庫的表

Spring註解配置(1)——@Autowired

val 輸出結果 oid override lap 需要 另一個 裝載 標記 @Autowired 註釋,它可以對類成員變量、方法及構造函數進行標註,完成自動裝配的工作。 通過 @Autowired的使用來消除 set ,get方法。在使用@Autowired之前,我們對一

【Spring實戰】Spring註解配置工作原理原始碼解析

一、背景知識在【Spring實戰】Spring容器初始化完成後執行初始化資料方法一文中說要分析其實現原理,於是就從原始碼中尋找答案,看原始碼容易跑偏,因此應當有個主線,或者帶著問題、目標去看,這樣才能最大限度的提升自身程式碼水平。由於上文中大部分都基於註解進行設定的(Spri

兩種配置Servlet的IP地址對映1註解、2配置檔案

1.建立專案 建立 servlet_test 動態web專案。 建立時點選 next, 勾選如下: 2.建立 test.java類 test.java 內容: 第一種:註解 – 設定IP地址對映

SpringBoot註解配置檔案自動對映到屬性和實體類實戰

講解使用@value註解配置檔案自動對映到屬性和實體類                  1、配置檔案載入        &nbs

Hibernate 實體對映 @註解與xml 配置方式比較

實體類與資料庫之間存在某種對映關係,Hibernate依據這種對映關係完成資料的存取,因此對映關係的配置在Hibernate中是最關鍵的。Hibernate支援xml配置檔案與@註解配置兩種方式。xml配置檔案是最基礎的配置,而@註解是Java的官方JPA(Java P

Spring Boot中使用MyBatis註解配置詳解(1

sql type .org 實體 sch 整合 PE 匯總 同傳 之前在Spring Boot中整合MyBatis時,采用了註解的配置方式,相信很多人還是比較喜歡這種優雅的方式的,也收到不少讀者朋友的反饋和問題,主要集中於針對各種場景下註解如何使用,下面就對幾種常見的情況舉

HIbernate實體註解配置

一、類級別註解 1、@Entity(name="EntityName")  必選 name為可選,對應資料庫中一的個表 2、@Table(name="",catalog="",schema="") 可選,通常和@Entity配合使用,只能標註在實體的class定義處

Spring 進階(8)使用註解配置bean(4)

新的一天哈,寫了個新的例子。package interface_package; public interface Animal { public void Bigger(String name); } package class_package; import interfa

Spring 進階(5) 使用註解配置bean(1)

可以在為類配置註解,然後在配置檔案中指定哪一個包下有註解的類都註冊成java bean,spring沒有使用約定由於配置的做法,根據註解配置bean的類的路徑要顯式指定。 要特別指出的是,這些通過註解的bean,spring給他們的id是將類名全部改成小寫字母 天道酬勤,來吧pac

註解配置實體類出現錯誤:Could not determine type for: java.util.Set, at table

org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: bs_merchant, for columns: [org.hibernate.mapping.Co

Spring3.1完全基於註解配置@Configuration類中@Autowire無法注入問題解決

在上回介紹Spring3.1+Hibernate4.1.7基於註解配置的時候(《SpringMVC3.1+Hibernate4.1.7完全基於註解配置(零配置檔案)》)說過,在修改配置方式的時候遇到過不少問題。這裡介紹一下。 方式一 On

SpringMVC3.1+Hibernate4.1.7完全基於註解配置(零配置檔案)

其實這篇文章應該是上篇《Servlet3.0下基於註解的SpringMVC3.1配置-完全零配置檔案》的續篇,因為上篇只介紹到web工程和Spring(包括MVC)的零配置,相對於傳統的SSH來說,相當於SS零配置了。那麼S和H的結合如果零配置檔

Servlet3.1使用@WebServlet註解配置問題記錄

@WebServlet 該註解用於在Web應用中定義Servlet元件。該註解在一個類上指定幷包含宣告Servlet的元資料。必須指定註解的urlPatterns或value屬性。所有其他屬性是可選的預設設定(請參考javadoc獲取更多細節)。當注解上唯一屬性是url模式

基於註解配置的spring mvc 4 + spring security 4例項與解析

關於spring security 4(以下簡稱SS) ,我們不能不否認,學習的成本是挺高的。如果光光是複製配置程式碼而不去理解SS的各個元件的實現原理和功能,那當然還是相當簡單的一回事,因為配置的程式碼就那麼幾行 PS:本人不是大神,寫部落格只是為了增強記憶

MyBatis 3(中文版) 第四章 使用註解配置SQL對映

例如,看下面的findStudentById()和findAllStudents()方法: @Select("SELECT * FROM STUDENTS WHERE STUD_ID=#{studId}")   @Results(   {       @Result(id = true

Hibernate中使用JPA(註解)配置物件關係對映

java中註解也是一大特點,平時進行單元測試時我們用過@Test註解進行測試 JPA就是java專門針對持久層框架進行設計的一套規範 JPA:Java Persistence API,其實它也就是一堆介面,就想JDBC一樣,不同的框架只要遵循這同一套規範就可以在java環境

通過XML、註解配置MyBatis SQL對映

SpringBoot配置MyBatis在 SpringBoot整合MyBatis開發 這篇文章中已經描述了,這篇文章主要講解一些SQL對映器中的寫法及常用標籤。 定義xml對映檔案 <mapper namespace="com.test.spr

Java註解配置數據庫表主鍵

java gen http 運行 數據庫表 integer rac bsp ber 一 數字類型 Integer @Id @GeneratedValue(strategy=GenerationType.IDENTITY) 運行後就Hiber