1. 程式人生 > >Hibernate基於註解方式的各種對映全面總結

Hibernate基於註解方式的各種對映全面總結

1. 使用HibernateAnnotation來做物件關係對映

 1) 新增必須包: 

   hibernate-jpa-2.0-api-1.0.0.Final.jar

 2)在實體類中新增JPA的標準註解來進行物件關係對映.註解可以新增在屬性上,也可以新增在getXxx()方法之上。

    a)@Entity 對映一個實體類

      @Table 指定關聯的表

    b) @Id對映OID

    c)@GeneratedValue 指定OID的生成策略

    d)@Version 對映版本號屬性

    e)@Column 指定屬性對應的列的資訊

    f)@Temporal 指定日期時間的型別(TIMESTAMP,DATE,TIME)

    g)簡單屬性可以不用註解。預設就是@Basic

    h)@Transient 指定屬性不需要對映

    i)複雜屬性:關聯,繼承,元件,聯合主鍵,集合

 3)在Hibernate全域性配置檔案中使用宣告對映類的方式:

   <mappingclass="實體類的全限定名"/>

 4)使用Annotation來對映物件關係時,載入Hibernate全域性配置要使用AnnotationConfiguration類

 5) 持久化操作與之前沒有區別。

2. HibernateAnnotation 基本對映

3.對映多對一

  1)@ManyToOne

  2)指定關聯列@JoinColumn(name="xxx_id")

4.對映一對多

  1) @OneToMany 預設會使用連線表做一對多的關聯

  2)新增@JoinColumn(name="xxx_id")後,就會使用外來鍵關聯,而不使用連線表了。

5.對映雙向一對多

  1)在多端: 

    @ManyToOne

  2) 在一端:

    @OneToMany(mappedBy="多端的關聯屬性名"):----升級後--> @OneToMany

    @JoinColumn(name="外來鍵名")

6.cascade屬性:指定級聯操作的行為(可多選)

   CascadeType.PERSIST:呼叫JPA規範中的persist(),不適用於Hibernate的save()方法

  CascadeType.MERGE:呼叫JPA規範中merge()時,不適用於Hibernate的update()方法

  CascadeType.REMOVE:呼叫JPA規範中的remove()時,適用於Hibernate的delete()方法

  CascadeType.REFRESH:呼叫JPA規範中的refresh()時,適用於Hibernate的flush()方法

  CascadeType.ALL:JPA規範中的所有持久化方法。

7.mappedBy屬性:用在雙向關聯中,把關係的維護權反轉

      跟hibernateXML對映中的property-ref一樣。

8.cascade屬性和mappedBy用在一起時,一定要通過呼叫雙方的set方法來建立關係。

10.雙向一對一

  1) 基於外來鍵

    a)在主控方:@OneToOne

    b)在被控方:@OneToOne(mappedBy="對方的關聯屬性名")

2) 基於主鍵:JPA標準中沒有提供共享主鍵生成問題的標準方法,使用Hibernate的擴充套件

 a) 在主控方:Car

       @Id

  @GeneratedValue(generator="my-uuid")

  @GenericGenerator(name="my-uuid", strategy="uuid")

  private String id;

  

  @OneToOne(cascade={CascadeType.ALL})

  @PrimaryKeyJoinColumn

  private Brand brand;

b) 在被控方:Brand

  @Id

  @GeneratedValue(generator="myFG")

  @GenericGenerator(name="myFG", strategy="foreign",[email protected](name="property",value="car"))

  private String id;

  

  @OneToOne(mappedBy="brand")

  private Car car;


11. 雙向多對多

  1. 在主控方:

    //從學生到課程的多對多: 最好由某一端來維護這個關係會更有效率

@ManyToMany

@JoinTable(name="student_course", 

joinColumns={@JoinColumn(name="student_id")},

inverseJoinColumns={@JoinColumn(name="course_id")})

private Set<Course> courseSet = new HashSet<Course>();

  2. 在被控方:

    //課程到學生的多對多

@ManyToMany(mappedBy="courseSet")

private Set<Student> stus = new HashSet<Student>();

12. 把雙向多對多拆成兩個一對多: 1-->*<--1


13. 繼承對映:

 1. 整個繼承樹一張表

 在父類中新增從下註解

@Entity

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)

@DiscriminatorColumn(name="type",length=3)

@DiscriminatorValue("u")


 子類中新增以下註解

@Entity

@DiscriminatorValue("w")


2. 每個子類一張表

在父類新增如下註解

@Entity

@Table(name="user")

@Inheritance(strategy=InheritanceType.JOINED)

在子類中跟普通實體類的對映相同


3. 每個具體類一張表

在父類中

@Entity

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

public class User {

@Id

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

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

private Long id;

...

}

在子類中跟普通實體類的對映相同


14. 元件對映

  在元件類中用@Emabbedable

 在使用這個元件類中用

 @Emabbed

 @AttributeOverrides({

@AttributeOverride(name="email", [email protected](name="p_email")),

@AttributeOverride(name="address", [email protected](name="p_address")),

@AttributeOverride(name="mobile", [email protected](name="p_mobile"))

})


15. 聯合主鍵對映

  1. 主鍵類:用@Emabbedable對映。並實現Serializable介面,使用主鍵屬性重寫hashCode()和equals()方法。

  2. 使用這個主鍵類的類中。用@Id對映。

相關推薦

Hibernate基於註解方式各種對映全面總結

1. 使用HibernateAnnotation來做物件關係對映  1) 新增必須包:     hibernate-jpa-2.0-api-1.0.0.Final.jar  2)在實體類中新增JPA的標準註解來進行物件關係對映.註解可以新增在屬性上,也可以新增在getXxx

2.2、Hibernate註解方式實現一對多、多對多關系

tab 技術部 employee join incr 無法運行 hset strategy urn 一、一對多關系   1、在上一篇日誌中用.xml配置文件項目基礎上,再往lib目錄先添加一個包-hibernate-jpa-2.0-api-1.0.0.Final.jar  

spring的依賴注入 -------基於註解方式

前言: 做了2年的軟體,剛開始入行的時候,沒有個目標基本上都是在摸索,技術看的我眼花繚亂,這個想學,那個也想學結果是對很多技術一知半解的,工作中才發現,我們要掌握的一門可以搞定快速開發搞定所有業務需求的技術, 所以現在我要對spring的東西達到一個深層次的掌握,儘量避免百度,在開發

基於註解方式純手寫spring-ioc

1.定義註解 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface ExtService { } 2.工具類 https://blog.csdn.net/qq_419882

hibernate基於註解的維護權反轉:@OneToMany(mappedBy=)

背景說明:首先是SSH環境下,物件基於註解的方式對映到資料庫; 昨天遇到一個比較糾結的問題,@OneToMany(mappedBy="xxx"), mappedBy屬性有什麼用,然後是寫在哪一邊? 還有一個問題是:@JoinColumn(name="xxxxx"),J

Mybatis 坑路5 -> Spring 與 MyBatis 整合 + 基於註解的 SQL 對映

##Spring 與 MyBatis 整合 + 基於註解的 SQL 對映器 依賴的 Jar 包   Mybatis 與 Spring 依賴的 Jar 包如下: mybatis-3.3.0.jar mybatis-spring-1.2.3.jar SpringFr

Hibernate兩種方式進行對映配置

hibernate.cfg.xml檔案如下: <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC         "-//Hibernate/Hib

springMVC第一個demo(基於註解方式

因為粗心沒仔細看報錯資訊所以搭建了好久,剛好有時間就記錄下來,希望其他訪問不到Controller類的初學者不要跟我一樣粗心浪費時間 jre版本:1.8 tomca版本:v9.0 spring版本:5.0.1 導包:本人匯入了spring的所有包,沒出現問題,不知道有沒有壞處,高手路過可以指

Hibernate基於外來鍵一對一對映操作例項

背景: 公民和公民的身份證,是一個一對一的例子,一個公民只有一個身份證。 場景準備: 實體類:Person.java、IdCard.java 實體類以及對映檔案程式碼: Person.java

搭建基於註解方式的SSH專案框架

轉自:http://blog.csdn.net/ererfei/article/details/46800415 1. 專案目錄以及資料表結構 2. 準備jar包 下面是我開發專案準備的jar包,可能有一些是專案依賴的,例如其中的

Hibernate 基於註解的SessionFactory類的生成以及自動生成表SchemaExport類的

像之前基於對映檔案 .hbm.xml 的SessionFactory類的寫法是這樣的 <span style="font-size:18px;color:#33CC00;">private

Spring AOP學習筆記(一)-AOP相關概念和基於註解方式實現AOP的規則

一、 Spring AOP 概念 其實AOP就是要將我們Aspect中的Pointcut和Target Object中的JointPoint動態的連線起來,同時我們通過Advice指明Pointcut執行的一個時機。這是個人理解 AOP相關名詞解釋

基於註解方式的AOP的配置與應用

AOP是OOP的延續,是Aspect Oriented Programming的縮寫,意思是面向切面程式設計。可以通過預編譯方式和執行期動態代理實現在不修改原始碼的情況下給程式動態統一新增功能的一種技術。AOP實際是GoF設計模式的延續,設計模式孜孜不倦追求的是呼叫者和被呼

Spring mvc基於註解方式實現簡單HelloWorld

實現spring MVC有兩種不同的方式:基於XML配置檔案和基於註解。 上篇部落格介紹了基於XML配置檔案的方式,這裡我們使用基於註解的方式來實現。 下面只重點介紹與XML配置檔案方式不同的兩個地方:Spring配置檔案(springmvc-servlet.xml)

Hibernate 基於外來鍵一對一對映(單雙向)

主要內容: 對映關聯關係 一對一關聯對映的策略 基於外來鍵的單(雙)一對一關聯對映 基於主鍵的單(雙)一對一關聯對映 基於外來鍵的單向一對一實際上是多對一關聯對映的特例 採用<many-to-o

hibernate annotation註解方式來處理映射關系

div hash void 就是 依賴 tcl 例如 直接 null 在hibernate中,通常配置對象關系映射關系有兩種,一種是基於xml的方式,另一種是基於annotation的註解方式,熟話說,蘿蔔青菜,可有所愛,每個人都有自己喜歡的配置方式,我在試了這兩種方式以後

Spring 之 IoC 原始碼分析 (基於註解方式)

一、 IoC 理論 IoC 全稱為 Inversion of Control,翻譯為 “控制反轉”,它還有一個別名為 DI(Dep

Atitit hibernste5 註解方式開發總結 目錄 1. 映入hb5的jar 建立專案 1 1.1. 建表tab1 ,這裡使用了sqlite資料庫 1 1.2. 建立對映實體類tab1

Atitit hibernste5  註解方式開發總結     目錄 1. 映入hb5的jar 建立專案 1 1.1. 建表tab1  ,這裡使用了sqlite資料庫 1 1.2. 建立對映實體類tab1  

hibernate基於annotation(註解)的方式建立資料庫表以及儲存資料到資料庫表中(重要)

在這裡建立專案後要把相關jar包與資料庫相關的jar包引入,並且配置好hibernate.cfg.xml檔案,這個專案採用的資料庫名稱是hibernate_anno.再建立一個實體類User,我們用的是註解的方式,所以不用像上篇文章中建立一個實體類的配置檔案,可以直接在實體類

Hibernate一對一主鍵關聯(基於annotation註解方式)

 hibernate中一對一的關聯有兩種方式:一種是採用外來鍵關聯,另外一種是採用主鍵關聯。  最近專案中用到一對一主鍵雙向關聯,並且是基於註解的方式。期間遇到一些問題,現在貼出來探討探討。  一個丈夫(husband)對應一個妻子(wife),主要目標是在儲存丈夫或者妻子