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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

JPA基礎概念

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

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

JPA簡介

JPA全稱(Java Persistence API),通常叫持久層API。它提供面向對象的編程模型,讓使用者更容易理解與上手;底層也提供了通用接口,可以實現與其它框架快速集成。下面整理一些基礎概念,不了解的可以參考下:

  • JPA是一種ORM規范。
  • Hibernate是JPA的一個子集。
  • Spring Data JPA,是JPA的代碼實現 ,同時底層為Hibernate技術實現。

JPA實戰-級聯操作

目前小編所開發項目的數據持久層大部分采用的是Spring Data JPA,經過長時間的使用驗證,發現出了級聯保存問題,即調用repository的save方法后,發現數據結果卻是“丟三落四”,這就很讓人腦袋疼,下面結合代碼一起分析下

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

圖片

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

圖片

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

心得

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7232

    瀏覽量

    90690
  • 存儲
    +關注

    關注

    13

    文章

    4458

    瀏覽量

    86852
  • API
    API
    +關注

    關注

    2

    文章

    1552

    瀏覽量

    63249
  • 編程
    +關注

    關注

    88

    文章

    3671

    瀏覽量

    94653
收藏 0人收藏

    評論

    相關推薦

    JPA實體類中的注解介紹

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

    VHDL的基礎概念

    VHDL的基礎概念
    發表于 08-20 20:41

    Labview的概念

    基本概念
    發表于 06-30 12:45

    JPA分頁查詢的常用方法

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

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

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

    springboot spring data jpa使用總結

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

    怎么學習SpringBoot

    SpringBoot學習之路(X5)- 整合JPA
    發表于 06-10 14:52

    ARM的概念

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

    PWM的概念和產生原理

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

    嵌入式數據庫驅動程序類相關資料分享

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

    怎樣去設計一個基于springboot+freemark+jpa+MySQL的在線電影訂票系統

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

    為什么會出現中斷的概念呢?這個概念是為了解決什么問題

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

    一文詳談Spring JPA

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

    基于概念可辨識矩陣的概念約簡方法

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

    使用JPA訪問數據的過程

    本指南將引導您完成構建應用程序的過程,該應用程序使用#spring# #spring認證# Spring Data JPA 在關系數據庫中存儲和檢索數據。
    的頭像 發表于 09-06 15:48 ?714次閱讀

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品
    主站蜘蛛池模板: 农民下乡在线观看3 | 古代荡女丫鬟高H辣文纯肉 姑娘视频日本在线播放 | 2021国产精品久久久久精品免费网 | 99视频在线免费看 | 久久青青热 | 在线观看精品视频看看播放 | 日本无码色哟哟婷婷最新网站 | 99久久精品费精品国产 | 把手戳进美女尿口里动态图 | 久久99热成人精品国产 | 色悠悠电影网 | 淫品色影院 | 偷偷鲁青春草原视频 | 9亚洲欧洲免费无码在线 | 高中生被C到爽哭视频免费 高挑人妻无奈张开腿 | 2020亚洲 欧美 国产 日韩 | 东京热无码中文字幕av专区 | 蜜芽在线影片 | gay台湾无套男同志xnxⅹ | 女子叉开腿让男子桶免费软件 | ABO成结顶腔锁住 | 国产精品日本不卡一区二区 | 无码免费视频AAAAAA片草莓 | 小女生RAPPER入口 | 999精品在线 | 超碰在线线公开免费视频 | 精品久久久亚洲精品中文字幕 | 日本理论片和搜子同居的日子2 | 亚洲精品无码一区二区三区四虎 | 亚洲 欧美 国产 综合 在线 | 亚洲人成网站在线播放 | 日韩一区二区三区射精 | 囯产精品麻豆巨作久久 | 久久精品国产色蜜蜜麻豆国语版 | 欧美z000z猪 欧美xxx性 | 再深点灬舒服灬太大了在线视频 | 国产一区二区波多野结衣 | 午夜免费小视频 | 伊人久久国产 | 永久免费精品精品永久-夜色 | 老熟女重囗味GRANNYBBW |