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