色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

JPA基礎(chǔ)概念

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-08 14:36 ? 次閱讀

相信大部分java小伙伴在日常開發(fā)過程中,在存儲(chǔ)操作層都會(huì)選擇更容易上手的jpa,各種封裝,通過注解等方式,簡(jiǎn)化了大量的代碼內(nèi)容,同時(shí)提升了開發(fā)效率,但是(敲黑板,永遠(yuǎn)都躲不開的但是...)相應(yīng)也將一些問題隱藏,需要更多的時(shí)間去理解、分析才能找到病根。

JPA簡(jiǎn)介

JPA全稱(Java Persistence API),通常叫持久層API。它提供面向?qū)ο蟮?a target="_blank">編程模型,讓使用者更容易理解與上手;底層也提供了通用接口,可以實(shí)現(xiàn)與其它框架快速集成。下面整理一些基礎(chǔ)概念,不了解的可以參考下:

  • JPA是一種ORM規(guī)范。
  • Hibernate是JPA的一個(gè)子集
  • Spring Data JPA,是JPA的代碼實(shí)現(xiàn) ,同時(shí)底層為Hibernate技術(shù)實(shí)現(xiàn)。

JPA實(shí)戰(zhàn)-級(jí)聯(lián)操作

目前小編所開發(fā)項(xiàng)目的數(shù)據(jù)持久層大部分采用的是Spring Data JPA,經(jīng)過長(zhǎng)時(shí)間的使用驗(yàn)證,發(fā)現(xiàn)出了級(jí)聯(lián)保存問題,即調(diào)用repository的save方法后,發(fā)現(xiàn)數(shù)據(jù)結(jié)果卻是“丟三落四”,這就很讓人腦袋疼,下面結(jié)合代碼一起分析下

  • 代碼場(chǎng)景:用戶與住址是多對(duì)多的關(guān)系,JPA中描述這種關(guān)系通常使用@ManyToMany注解,首先是創(chuàng)建對(duì)象
//維護(hù)端
public class User{
    //屬性代碼省略
    @ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
    @JoinTable(name = "user_addresses",
            joinColumns = {@JoinColumn(name = "user_id",referencedColumnName = "user_id")},
              inverseJoinColumns = {@JoinColumn(name = "address_id",referencedColumnName = "address_id")})
    private Set< Address > addresses = new HashSet<  >();
}
//被維護(hù)方
public class Address{
    //屬性代碼省略
    @ManyToMany(mappedBy = "addresses")
    @JsonIgnore
    private Set< User > users = new HashSet<  >();
}
  • 最初我只在維護(hù)端設(shè)置的級(jí)聯(lián)屬性(Cascade.ALL),然后通過維護(hù)端進(jìn)行保存,很順利,User表、Address表、user_addresses關(guān)聯(lián)表都能保存,代碼如下,沒毛病。
// 維護(hù)端操作
public User save(){
    Address address = new Address();
    address.setAddressName("北京海淀");
    User user1 = new User();
    user1.setName("阿韋");
    user1.getAddresses().add(address);
    return UserService.save(User1);
}
  • 然后我換了個(gè)思路,從被維護(hù)端能不能進(jìn)行保存,然后就立即進(jìn)行嘗試。代碼如下
// 被維護(hù)端操作
 public Address save(){
     Address address = new Address();
     address.setAddressName("北京海淀");
     User user1 = new User();
     user1.setName("阿韋");
     address.getUsers().add(user1);
     return addressService.save(address);
 }
  • 結(jié)果,我以為能夠成功的時(shí)候,發(fā)現(xiàn)只保存了Address一張表,還沒報(bào)錯(cuò),就是User表和關(guān)聯(lián)表死活沒有數(shù)據(jù)。此時(shí),問題已經(jīng)復(fù)現(xiàn),查閱各種文檔說明,大概是需要添加級(jí)聯(lián)屬性,改造內(nèi)容如下
@ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER,mappedBy = "addresses")
private Set< User > users = new HashSet<  >();
  • 修改之后再一次進(jìn)行保存,兩個(gè)實(shí)體類的表確實(shí)都生成了數(shù)據(jù),但是關(guān)聯(lián)表還是沒有,這時(shí)已經(jīng)快要抓狂,但問題還是沒解決,繼續(xù)耐心分析,很快就在控制臺(tái)打印sql處發(fā)現(xiàn)了一些貓膩:

圖片

  • 果然是沒有對(duì)關(guān)聯(lián)表的數(shù)據(jù)操作,接下來又是一頓探索,終于找到根源了,由被維護(hù)端發(fā)起操作的時(shí)候,需要為關(guān)聯(lián)類屬性添加彼此,感覺真是關(guān)聯(lián)到“恩愛”的地步了,羨煞旁人啊!!!
// 被維護(hù)端操作
 public Address save(){
    Address address = new Address();
    address.setAddressName("中央花園");
    User user1 = new User();
    user1.setName("阿韋");
    user1.setHeight("170");
    user1.setSex("1");
    //在彼此定義對(duì)方類集合中添加
    user1.getAddresses().add(address);
    address.getUsers().add(user1);
    return addressService.save(address);
 }

圖片

  • 最終徹底解決掉了問題,數(shù)據(jù)持久化到相應(yīng)的表中。自己也確實(shí)松了一口氣,過程雖然充滿曲折,但結(jié)果還是非常鼓舞自己的。

心得

希望本文能夠幫你避開jpa的坑,這就是小編最驕傲的事情。每一條道路上都是坑洼不平的,有些時(shí)候可能會(huì)掉入坑里,希望每個(gè)人都能重新站起來,跳過阻擋你的“坑”,最終會(huì)收獲到很多,讓自己變得更強(qiáng)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7085

    瀏覽量

    89233
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4332

    瀏覽量

    85960
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1505

    瀏覽量

    62187
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3628

    瀏覽量

    93825
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    JPA實(shí)體類中的注解介紹

    今天給大家介紹一下 JPA 實(shí)體類中的注解,希望能對(duì)大家有幫助。 基本注解 @Entity 標(biāo)注于實(shí)體類聲明語句之前,指出該 Java 類為實(shí)體類,將映射到指定的數(shù)據(jù)庫表。 name(可選):實(shí)體
    的頭像 發(fā)表于 09-25 14:42 ?744次閱讀

    VHDL的基礎(chǔ)概念

    VHDL的基礎(chǔ)概念
    發(fā)表于 08-20 20:41

    Labview的概念

    基本概念
    發(fā)表于 06-30 12:45

    JPA分頁查詢的常用方法

    JPA分頁查詢與條件分頁查詢
    發(fā)表于 10-23 17:10

    使用jpa和thymeleaf做增刪改查示例

    【本人禿頂程序員】springboot專輯:springboot+jpa+thymeleaf增刪改查示例
    發(fā)表于 04-01 11:49

    springboot spring data jpa使用總結(jié)

    【本人禿頂程序員】springboot專輯:spring data jpa的使用
    發(fā)表于 04-15 11:38

    怎么學(xué)習(xí)SpringBoot

    SpringBoot學(xué)習(xí)之路(X5)- 整合JPA
    發(fā)表于 06-10 14:52

    ARM的概念

    本文簡(jiǎn)單梳理一下ARM有關(guān)的概念,包括ARM architecture、ARM core、ARM CPU(或MCU)以及ARM Soc。我們這些以ARM平臺(tái)為主的嵌入式工程師,幾乎每天都會(huì)和這些概念
    發(fā)表于 03-03 06:36

    PWM的概念和產(chǎn)生原理

    文章目錄前言一、PWM的概念和產(chǎn)生原理1. PWM的概念2. PWM產(chǎn)生原理二、PWM工程1. 新建工程2. 設(shè)置PWM3. 代碼介紹4. 代碼編寫5. 實(shí)驗(yàn)現(xiàn)象6. 代碼修改17. 代碼修改28.
    發(fā)表于 08-09 08:26

    嵌入式數(shù)據(jù)庫驅(qū)動(dòng)程序類相關(guān)資料分享

    creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': ...
    發(fā)表于 12-21 07:45

    怎樣去設(shè)計(jì)一個(gè)基于springboot+freemark+jpa+MySQL的在線電影訂票系統(tǒng)

    本系統(tǒng)是由springboot+freemark+jpa+MySQL實(shí)現(xiàn)的在線電影訂票系統(tǒng),主要的亮點(diǎn)功能有:支持短信發(fā)送接口、支付寶在線支付接口、座位鎖定及并發(fā)處理、排片時(shí)間沖突檢測(cè)等。本系統(tǒng)主要
    發(fā)表于 01-03 07:22

    為什么會(huì)出現(xiàn)中斷的概念呢?這個(gè)概念是為了解決什么問題

    本篇博客不是針對(duì)某一門具體的技術(shù),而是從概念去理解某些東西,當(dāng)然會(huì)拿某些技術(shù)舉例子但是不限于特定某一門。中斷的概念:中斷的概念最開始接觸是在stm32單片機(jī)中。為什么會(huì)出現(xiàn)中斷的概念
    發(fā)表于 01-05 08:02

    一文詳談Spring JPA

    大家好,今天我和大家聊一下關(guān)于Spring JPA 的相關(guān)知識(shí),我們先來了解下什么是 JPA
    的頭像 發(fā)表于 06-30 17:29 ?2225次閱讀

    基于概念可辨識(shí)矩陣的概念約簡(jiǎn)方法

    基于布爾因子分析的概念約簡(jiǎn)能夠保持形式背景的二元關(guān)系不變。借鑒概念格中基于可辨識(shí)矩陣求解屬性約簡(jiǎn)的思想,在形式背景上定義概念可辨識(shí)矩陣,基于此給岀保持二元關(guān)系不變的概念約簡(jiǎn)方法。首先,
    發(fā)表于 04-19 15:39 ?1次下載
    基于<b class='flag-5'>概念</b>可辨識(shí)矩陣的<b class='flag-5'>概念</b>約簡(jiǎn)方法

    使用JPA訪問數(shù)據(jù)的過程

    本指南將引導(dǎo)您完成構(gòu)建應(yīng)用程序的過程,該應(yīng)用程序使用#spring# #spring認(rèn)證# Spring Data JPA 在關(guān)系數(shù)據(jù)庫中存儲(chǔ)和檢索數(shù)據(jù)。
    的頭像 發(fā)表于 09-06 15:48 ?650次閱讀
    主站蜘蛛池模板: 欧美肥胖女人bbwbbw视频| 大乳牛奶女magnet| 99在线免费观看| 国产精品资源网站在线观看| 久久久无码精品亚洲欧美| 特黄AAAAAAA片免费视频| 99国产精品免费视频| 九九热视频在线观看| 偷拍 拍自 欧美色区| 99麻豆精品国产人妻无码| 久久4k岛国高清一区二区| 思思99热久久精品在线6| 99re久久热在这里精品| 久久精品国产99欧美精品亚洲| 午夜影视免费| 俄罗斯性xxxx| 日韩人妻无码专区一本二本| 97草碰在线视频免费| 恋老视频 国产国佬| 伊人久久综在合线亚洲| 红色机尾快播| 亚洲地址一地址二地址三| 国产传媒精品1区2区3区| 肉动漫3D卡通无修在线播放| MELODY在线播放无删减| 嫩草国产精品99国产精品| 最新黄色在线| 理论片午午伦夜理片影院| 在线播放一区二区精品产| 久久91精品国产91久久户| 亚洲三级视频在线观看| 国产亚洲精品在浅麻豆| 亚洲AV色香蕉一区二区9255| 国产乱码精品AAAAAAAA| 同桌别揉我奶了嗯啊| 国产精品亚洲精品爽爽| 小sao货ji巴cao死你视频| 国产亚洲精品久久精品69| 亚洲熟女乱色一区二区三区| 久久国产高清字幕中文| 中国人泡妞www免费|