日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

基于Spring Boot使用JpaRepository刪除數據時的注意事項

瀏覽:33日期:2023-07-11 15:15:46
問題:

在Spring Boot中使用JpaRepository的deleteById(ID id)方法刪除數據時,首先要使用existsById(ID id)方法判斷數據是否存在。如果存在,再刪除。

否則,刪除一個id不存在的數據會拋出org.springframework.dao.EmptyResultDataAccessException異常:

2019-01-02 15:57:24.122 WARN org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration$JpaWebConfiguration$JpaWebMvcConfiguration Line:234 - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning2019-01-02 15:57:24.673 ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] Line:175 - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.EmptyResultDataAccessException: No class com.qiqi.model.entity.UserBean entity with id 33 exists!] with root causeorg.springframework.dao.EmptyResultDataAccessException: No class com.qiqi.model.entity.UserBean entity with id 33 exists! at org.springframework.data.jpa.repository.support.SimpleJpaRepository.lambda$deleteById$0(SimpleJpaRepository.java:150) at org.springframework.data.jpa.repository.support.SimpleJpaRepository$$Lambda$798/1206249587.get(Unknown Source) at java.util.Optional.orElseThrow(Optional.java:290) at org.springframework.data.jpa.repository.support.SimpleJpaRepository.deleteById(SimpleJpaRepository.java:149) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:359) at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:200) at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:644) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:608) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lambda$invoke$3(RepositoryFactorySupport.java:595) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor$$Lambda$787/1363172555.get(Unknown Source) at org.springframework.data.repository.util.QueryExecutionConverters$$Lambda$786/1029051888.apply(Unknown Source) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:595) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:59) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

在使用其他方法時,例如:deleteAllByName(name),不進行判斷也可以刪除,不會拋出異常。

springboot的jpa數據庫操作的坑

前一段用springboot寫了篇 springboot整合多數據源小博文,從三個數據庫里面抓取合適的數據。存在另外一個數據庫里面。在客戶生產環境運行了一段時間,感覺似乎很良好。

客戶覺得意猶未盡,又提了點需求,順便提了點bug,于是乎又改了改代碼??蛻艟尤惶岢鲆粋€問題,說有時候查不出數據來,過一會又好了,我在本地試了試,發現在本地竟然也存在這個問題。問題其實一直都有,只是似乎不影響什么,所以便沒當一回事。

經過反復測試,原來是往數據庫寫數據的時候卡住了,有點奇怪。大概過程是先把表里面數據清除,然后再寫入,數據不到1000條,居然耗時差不多10秒,什么springboot,什么jpa太不靠譜了吧?

看代碼 ,Repository

package net.springboot.repository.sqlserver;import java.util.List;import org.springframework.data.jpa.repository.JpaRepository;import net.springboot.entity.sqlserver.RealData;public interface XXDataRepository extends JpaRepository<XXData, String>{}

調用代碼也是簡單明了

db.deleteAll();db.saveAll(list); //組合list這里就不寫了

其實說白了,沒有自己的代碼,都是springboot + jpa 框架實現的,框架難道有問題,這個一般不會吧。把SQL放出來看看。

基于Spring Boot使用JpaRepository刪除數據時的注意事項

基于Spring Boot使用JpaRepository刪除數據時的注意事項

原來這個樣子,刪除全表數據,居然是一條一條數據刪除,批量保存居然是先查詢一下,然后再插入,JPA難道不考慮效率的嗎?

問題找到了,怎么解決了?刪除功能好辦,自己寫SQL嘛,簡單方便,翠花上川菜,代碼拿來。

@Transactional@Modifying@Query(value = 'TRUNCATE TABLE table',nativeQuery = true)int TruncateTable();@Transactional@Modifying@Query(value = 'delete from table',nativeQuery = true)int deleteTable();

效果是立竿見影,刪除效率上來了。清空表里數據一秒不到。不過,后來又仔細看了一下,jpa似乎還提供了另外一個刪除全部數據的方法 deleteAllInBatch,這個方法在刪除前似乎沒有查詢,懶得做測試了,習慣了自己寫SQL解決問題。

但是批量插入這個不好辦了,總不可能自己寫成一條一條插入啊,那還不如不改了。百度一下,網上說改一下配置文件即可。

spring.jpa.properties.hibernate.jdbc.batch_size=500spring.jpa.properties.hibernate.jdbc.batch_versioned_data=truespring.jpa.properties.hibernate.order_inserts=truespring.jpa.properties.hibernate.order_updates=true

但是好像效果不行,show sql 還是一樣,先查詢后插入,效率依然不行。想了很多,百度了很多,為什么了,為什么???JPA這玩意為什么會在插入前查詢一下了,查詢又是怎么個查詢方式了?這個應該與主鍵ID有關系。所以改一下實體類,id統一為uuid模式。

@Id @GenericGenerator(name = 'id-generator', strategy = 'uuid') @GeneratedValue(generator = 'id-generator') @Column(name = 'pid') public String pid;

效果明顯,問題立馬解決。但是有的系統主鍵ID是生成好的,有自己的規則,不可以隨便uuid,比如我這個系統就是,都是在各個系統里面已經生成好了,而且還因為業務需要不能改。

沒辦法只有另加一個字段做為@id 雖然沒啥實際意義,但是批量寫入數據的問題得到徹底解決,你好,我好,大家好。

不過話說回來,插入前查詢一下,這個功能是可以有,在大多數的業務場景也是很有用的。springboot的jpa就這樣,在系統中,具體怎么用,碼農們各顯神通。

也算是趟過 springboot,jpa框架的兩個坑。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久久久久久久99精品大| 久久av导航| 四虎8848精品成人免费网站| 国产精品一区亚洲| 国产精品久久| 久久av免费| 久久亚洲人体| 福利一区二区三区视频在线观看| 国产中文字幕一区二区三区| 精品亚洲二区| 国产精品v一区二区三区| 欧美日韩一区二区三区在线电影| 日韩专区视频网站| 欧美亚洲综合视频| 福利一区二区| 亚洲综合电影一区二区三区| 人人爱人人干婷婷丁香亚洲| 国产精品videosex极品| 国产66精品| 宅男在线一区| 日本一区二区三区中文字幕| 欧美国产极品| 国产亚洲一级| 麻豆精品蜜桃视频网站| 国产中文一区| 国产日产精品一区二区三区四区的观看方式 | 久久美女精品| 亚洲免费福利一区| 国产精品成人a在线观看| 在线亚洲国产精品网站| 欧美亚洲三区| 亚洲女同一区| 国产一区二区三区四区五区 | 九一精品国产| 91成人在线网站| 久久三级视频| 国产精品一区二区精品| 午夜欧美理论片| 色婷婷亚洲mv天堂mv在影片| 黄色成人91| sm捆绑调教国产免费网站在线观看| 日本欧美在线看| 国户精品久久久久久久久久久不卡 | 亚洲天堂免费电影| 日韩av中文字幕一区| 好看不卡的中文字幕| 国产一区二区三区黄网站| 亚洲18在线| 亚洲欧洲一区| 久久精品亚洲人成影院| 国产精选一区| 欧美视频精品全部免费观看| 黄色成人91| 老鸭窝毛片一区二区三区| 久久久成人网| 日韩欧美一区二区三区免费观看| 久久爱www成人| 国产日本精品| 爽好多水快深点欧美视频| 麻豆mv在线观看| 国产一区2区在线观看| 国产高清视频一区二区| 欧美一区成人| 国产精品久久久免费| 青青草91久久久久久久久| 日韩区一区二| 国产亚洲精aa在线看| 国产精品大片| 国产一区二区精品久| 欧洲一级精品| 老鸭窝毛片一区二区三区| 少妇精品久久久| 国产欧美日韩影院| 欧美日本精品| 久久国产三级| 国产激情精品一区二区三区| 精品久久福利| 成人日韩在线| 免费在线观看视频一区| 日韩激情网站| 欧美经典一区| 欧美日韩激情在线一区二区三区| 欧美专区18| 国产精品.xx视频.xxtv| 日韩一区亚洲二区| 亚洲一区二区免费在线观看| 久久国产免费看| 欧美日韩一二三四| 亚洲天堂日韩在线| 卡一卡二国产精品| aⅴ色国产欧美| 欧美国产三级| 亚洲精品99| 久久久精品区| 欧美资源在线| av资源中文在线天堂| 综合激情一区| 欧美一区二区三区激情视频| 欧美久久香蕉| 久久午夜视频| 丁香婷婷久久| 深夜福利一区| 欧美国产91| 国产精品黄色片| 欧美日韩国产高清电影| 老司机免费视频一区二区三区| 日本 国产 欧美色综合| 日韩黄色大片网站| 国产精品99精品一区二区三区∴| 羞羞答答国产精品www一本 | 三级小说欧洲区亚洲区| 国产午夜精品一区在线观看| 免费日韩精品中文字幕视频在线| 日韩免费在线| 国产精品毛片一区二区在线看| 日本午夜精品视频在线观看| 视频一区二区三区在线| 国产一区二区色噜噜| 国产精品亚洲二区| 亚洲一区二区av| 日韩精品一二三区| 午夜精品婷婷| 国产精品av久久久久久麻豆网| sm久久捆绑调教精品一区| 精品国产一区二| 免费在线欧美黄色| 欧美国产亚洲精品| 美女精品久久| 久久精品网址| 伊人久久视频| 欧洲一级精品| 不卡在线一区| 欧美特黄一区| 天堂俺去俺来也www久久婷婷| 天海翼精品一区二区三区| 四虎精品永久免费| 欧美日韩黄网站| 岛国精品一区| 九九在线精品| 天堂av在线一区| 欧美啪啪一区| 成人国产精品一区二区网站| 丝袜美腿诱惑一区二区三区 | 欧美亚洲国产精品久久| 日韩午夜精品| 欧美 日韩 国产精品免费观看| 99成人超碰| 亚洲精品一级| 久久免费精品| 日韩一区二区免费看| 日本成人一区二区| 福利一区二区三区视频在线观看| 91视频一区| 亚洲欧美日韩精品一区二区 | 国产精品一区二区三区四区在线观看| 麻豆国产精品| 午夜精品影院| 久久永久免费| 精品一区毛片| 国产欧美日韩精品高清二区综合区 | 成人国产精品一区二区网站| 国产日韩综合| 久久久久久婷| 日韩精品社区| 国产91欧美| 视频一区视频二区中文| 久久男人av| 亚洲免费在线| 成人精品中文字幕| 免费一区二区三区在线视频| 在线午夜精品| 欧美午夜精品一区二区三区电影| 欧美一区精品| 亚洲精品日本| 亚洲欧洲日本mm| 欧美aa在线观看| 久久久亚洲欧洲日产| 日韩精品午夜视频| 天堂va蜜桃一区二区三区| 日本精品影院| 日韩精品视频网站| 男人的天堂亚洲一区| 日韩不卡在线| 蜜臀国产一区| 国产va免费精品观看精品视频| 日韩激情综合| 亚洲+小说+欧美+激情+另类| 蜜桃国内精品久久久久软件9| xxxxx性欧美特大| 国产盗摄——sm在线视频| 久久中文字幕一区二区三区| 国产日本精品| 国产精品中文| 精品久久免费| 伊伊综合在线| а√天堂8资源在线| 精品日韩在线| 成人在线视频免费看| 精品国产亚洲日本| 日韩理论片av|