jpa hibernate注解

lombok 注解:

? ? ? ? @Data? :注解在類上悔详;提供類所有屬性的 getting 和 setting 方法,此外還提供了equals、canEqual、

? ? ? ? ? ? ? ? ? ? ? ? ? hashCode酿愧、toString 方法

? ? ? ? @Setter:注解在屬性上;為屬性提供 setting 方法

? ? ? ? @Getter:注解在屬性上邀泉;為屬性提供 getting 方法

? ? ? ? @Log4j :注解在類上嬉挡;為類提供一個 屬性名為log 的 log4j 日志對象

? ? ? ? @NoArgsConstructor:注解在類上;為類提供一個無參的構(gòu)造方法

? ? ? ? @AllArgsConstructor:注解在類上汇恤;為類提供一個全參的構(gòu)造方法

@Entity? 數(shù)據(jù)庫里對應(yīng)一個表

@Entity(name="t_students")? //使用了這個注解以后? 這個屬性就可以映射成關(guān)系型數(shù)據(jù)庫中的一張叫做t_students的表? 沒有name的話就默認生成students

@GeneratedValue

通過annotation來映射hibernate實體的,基于annotation的hibernate主鍵標識為@Id,?

其生成規(guī)則由@GeneratedValue設(shè)定的.這里的@id和@GeneratedValue都是JPA的標準用法,?

JPA提供的四種標準用法為TABLE,SEQUENCE,IDENTITY,AUTO.?

TABLE:使用一個特定的數(shù)據(jù)庫表格來保存主鍵庞钢。?

SEQUENCE:根據(jù)底層數(shù)據(jù)庫的序列來生成主鍵,條件是數(shù)據(jù)庫支持序列因谎。?

IDENTITY:主鍵由數(shù)據(jù)庫自動生成(主要是自動增長型)?

AUTO:主鍵由程序控制基括。?

@Temporal(TemporalType.DATE) 格式化時間日期

1.日期:

@Temporal(TemporalType.DATE)

?@Column(name = "applyDate", nullable = false, length = 10)

?public Date getApplyDate() {

??return applyDate;

?}

在頁面端取值:2011-04-12

?2.時間:

@Temporal(TemporalType.TIME)

在頁面端取值:22:50:30

?3.日期和時間(默認):

@Temporal(TemporalType.TIMESTAMP)?

在頁面端取值:2011-04-12 22:51:34.0

?@OneToMany(mappedBy="order",cascade = CascadeType.ALL, fetch = FetchType.LAZY)?

//這里配置關(guān)系,并且確定關(guān)系維護端和被維護端财岔。mappedBy表示關(guān)系被維護端风皿,只有關(guān)系端有權(quán)去更新外鍵。這里還有注意OneToMany默認的加載方式是賴加載匠璧。當(dāng)看到設(shè)置關(guān)系中最后一個單詞是Many桐款,那么該加載默認為懶加載???

(1)ManyToOne(多對一)單向:不產(chǎn)生中間表,但可以用@Joincolumn(name="??")來指定生成外鍵的名字夷恍,外鍵在多的一方表中產(chǎn)生魔眨!

(2)OneToMany(一對多)單向:會產(chǎn)生中間表,此時可以用@onetoMany @Joincolumn(name="?")避免產(chǎn)生中間表酿雪,并且指定了外鍵的名字(別看 ? ? ? ? ?@joincolumn在一中寫著遏暴,但它存在在多的那個表中)

(3)OneToMany?,ManyToOne?雙向(兩個注解一起用的):如果不在@OneToMany中加mappedy屬性就會產(chǎn)生中間表,此時通常在@ManyToOne的注 ? ? ? ? ? ?解下再添上注解@Joincolumn(name=" ")來指定外鍵的名字(說明:多的一方為關(guān)系維護端执虹,關(guān)系維護端負責(zé)外鍵記錄的更新拓挥,關(guān)系被維護端沒有權(quán)利更新外鍵記錄)!(@OneToMany(mappedBy="一對多中袋励,多中一的屬性")出現(xiàn)mapby為被維護端|||默認為延遲加載)

用例:@ManyToOne(fetch=FetchType.LAZY)

@JoinColumn(name="child_id")

private OrderChild orderChild;

? @OneToMany(mappedBy="orderChild",fetch=FetchType.LAZY,cascade={CascadeType.MERGE})

? @NotFound(action=NotFoundAction.IGNORE)//代表可以為空,允許為null

? private List goodsList;

hibernate中@ManyToOne默認是立即加載当叭,@OneToMany默認是懶加載

但是如果加上了@NotFound之后設(shè)置的fetch=FetchType.LAZY是不起作用的茬故,也就是設(shè)置@NotFound后變?yōu)榱肆⒓醇虞deager

?@OrderBy(value =?"id ASC")

mappedBy

?mappedBy屬性用于雙向關(guān)聯(lián)實體時使用。

CascadeTypeType.ALL

? ? ? cascade屬性表示與此實體一對一關(guān)聯(lián)的實體的聯(lián)級樣式類型蚁鳖。聯(lián)級樣式上當(dāng)對實體進行操作時的策略磺芭。

?????? 說明:在定義關(guān)系時經(jīng)常會涉及是否定義Cascade(級聯(lián)處理)屬性,擔(dān)心造成負面影響.

????????·不定義,則對關(guān)系表不會產(chǎn)生任何影響

????????·CascadeType.PERSIST (級聯(lián)新建)

????????·CascadeType.REMOVE (級聯(lián)刪除)

????????·CascadeType.REFRESH (級聯(lián)刷新)

????????·CascadeType.MERGE (級聯(lián)更新)中選擇一個或多個醉箕。

????????·還有一個選擇是使用CascadeType.ALL 钾腺,表示選擇全部四項

fetch = FetchType.LAZY懶加載

如果是EAGER徙垫,那么表示取出這條數(shù)據(jù)時,它關(guān)聯(lián)的數(shù)據(jù)也同時取出放入內(nèi)存中

如果是LAZY放棒,那么取出這條數(shù)據(jù)時姻报,它關(guān)聯(lián)的數(shù)據(jù)并不取出來,在同一個session中间螟,什么時候要用吴旋,就什么時候取(再次訪

問數(shù)據(jù)庫)。但是厢破,在session外荣瑟,就不能再取了。用EAGER時摩泪,因為在內(nèi)存里笆焰,所以在session外也可以取。

一般只在一邊設(shè)Eager见坑,JPA接口默認為一對多為Lazy嚷掠,多對一為Eager,但是Hibernate反向工程生成Entity時鳄梅,多對一為Lazy叠国,需要手動改為Eager。?而兩邊都設(shè)Eager戴尸,那么代碼中取一條記錄時粟焊,會發(fā)2次SQL。

映射策略

# 外鍵關(guān)聯(lián):兩個表的關(guān)系定義在一個表中孙蒙;

# 表關(guān)聯(lián):兩個表的關(guān)系單獨定義一個表中通過一個中間表來關(guān)聯(lián)项棠。

映射策略——外鍵關(guān)聯(lián)

? ? ? ?@OneToMany(casade={CascadeTypeType.ALL})

???? ? @JoinColumn(name="customer_id")

因為一對多的實體集合時保存在集合類中,因此必須指明集合類中保存的具體類型:

1)指定集合泛型的具體類型挎峦;如:public Collection getAddress() {...

2)指定targetEntity屬性類型香追;如:@OneToMany(targetEntity=AddressEO.class,casade={CascadeTypeType.ALL})

映射策略——表關(guān)聯(lián)

? ? ? ? @OneToMany(casade={CascadeTypeType.ALL})

????????@JoinTable(name="ref_customer_address",

???? ? ? ? ? ? ? ???joinColumn={@JoinColumn(name="customer_id",referencedColumnName="id")},

??????????? ? ? ? ? inverseJoinColumn={@JoinColumn(name="address_id",referencedColumnName="id")}

???????? )

# name屬性為連接兩個表的表名稱。若不指定坦胶,則使用默認的表名稱透典,格式如下:

??????"表名1" + "_" + "表名2"

# joinColumn屬性表示,在保存關(guān)系的表中顿苇,所保存關(guān)聯(lián)關(guān)系的外鍵的字段峭咒,并配合@JoinColumn標記使用;?@JoinColumn用于注釋表中的字段纪岁,與@Column不同的是它要保存表與表之間關(guān)系的字段凑队;

# inverseJoinColumn屬性與joinColumn類似,它保存的是保存關(guān)系的另外一個外鍵字段幔翰;

# catalog和schema屬性表示實體指定點目錄名稱或數(shù)據(jù)庫名稱漩氨;

# uniqueConstraints屬性表示該實體所關(guān)聯(lián)的唯一約束條件西壮,一個實體可以有多個唯一約束條件,默認沒有約束叫惊;

注意:@JoinTable不僅能夠定義一對多的關(guān)聯(lián)款青,也可以定義多對多表的關(guān)聯(lián)。

@NotEmpty 用在集合類上面?

@NotBlank 用在String上面?

@NotNull 用在基本類型上

@Enumerated(value=EnumType.ORDINAL)采用枚舉類型的序號值與數(shù)據(jù)庫進行交互赋访,?

此時數(shù)據(jù)庫的數(shù)據(jù)類型需要是數(shù)值類型可都,例如在實際操作中?

CatTest ct = new CatTest();?

ct.setColor(Color.BLUE);?

當(dāng)我們將對象gt保存到數(shù)據(jù)庫中的時候,數(shù)據(jù)庫中存儲的數(shù)值是BLUE在Color枚舉?

定義中的序號1(序號從零開始)蚓耽;

@Enumerated(value=EnumType.STRING)采用枚舉類型與數(shù)據(jù)庫進行交互渠牲,?

此時數(shù)據(jù)庫的數(shù)據(jù)類型需要是NVACHAR2等字符串類型,例如在實際操作中?

CatTest ct = new CatTest();?

ct.setColor(Color.BLUE);?

數(shù)據(jù)庫中存儲的數(shù)值是BLUE字符串

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末步悠,一起剝皮案震驚了整個濱河市签杈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鼎兽,老刑警劉巖答姥,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谚咬,居然都是意外死亡鹦付,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門择卦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敲长,“玉大人,你說我怎么就攤上這事秉继∑碓耄” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵尚辑,是天一觀的道長辑鲤。 經(jīng)常有香客問我,道長杠茬,這世上最難降的妖魔是什么月褥? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮瓢喉,結(jié)果婚禮上吓坚,老公的妹妹穿的比我還像新娘。我一直安慰自己灯荧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布盐杂。 她就那樣靜靜地躺著逗载,像睡著了一般哆窿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厉斟,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天挚躯,我揣著相機與錄音,去河邊找鬼擦秽。 笑死码荔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的感挥。 我是一名探鬼主播缩搅,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼触幼!你這毒婦竟也來了硼瓣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤置谦,失蹤者是張志新(化名)和其女友劉穎堂鲤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媒峡,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡瘟栖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了谅阿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片半哟。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奔穿,靈堂內(nèi)的尸體忽然破棺而出镜沽,到底是詐尸還是另有隱情,我是刑警寧澤贱田,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布缅茉,位于F島的核電站,受9級特大地震影響男摧,放射性物質(zhì)發(fā)生泄漏蔬墩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一耗拓、第九天 我趴在偏房一處隱蔽的房頂上張望拇颅。 院中可真熱鬧,春花似錦乔询、人聲如沸樟插。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽黄锤。三九已至搪缨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸵熟,已是汗流浹背副编。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留流强,地道東北人痹届。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像打月,于是被迫代替她去往敵國和親队腐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容