成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

基于Spring Boot使用JpaRepository刪除數(shù)據(jù)時(shí)的注意事項(xiàng)

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

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

否則,刪除一個(gè)id不存在的數(shù)據(jù)會(huì)拋出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)

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

springboot的jpa數(shù)據(jù)庫操作的坑

前一段用springboot寫了篇 springboot整合多數(shù)據(jù)源小博文,從三個(gè)數(shù)據(jù)庫里面抓取合適的數(shù)據(jù)。存在另外一個(gè)數(shù)據(jù)庫里面。在客戶生產(chǎn)環(huán)境運(yùn)行了一段時(shí)間,感覺似乎很良好。

客戶覺得意猶未盡,又提了點(diǎn)需求,順便提了點(diǎn)bug,于是乎又改了改代碼。客戶居然提出一個(gè)問題,說有時(shí)候查不出數(shù)據(jù)來,過一會(huì)又好了,我在本地試了試,發(fā)現(xiàn)在本地竟然也存在這個(gè)問題。問題其實(shí)一直都有,只是似乎不影響什么,所以便沒當(dāng)一回事。

經(jīng)過反復(fù)測(cè)試,原來是往數(shù)據(jù)庫寫數(shù)據(jù)的時(shí)候卡住了,有點(diǎn)奇怪。大概過程是先把表里面數(shù)據(jù)清除,然后再寫入,數(shù)據(jù)不到1000條,居然耗時(shí)差不多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>{}

調(diào)用代碼也是簡(jiǎn)單明了

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

其實(shí)說白了,沒有自己的代碼,都是springboot + jpa 框架實(shí)現(xiàn)的,框架難道有問題,這個(gè)一般不會(huì)吧。把SQL放出來看看。

基于Spring Boot使用JpaRepository刪除數(shù)據(jù)時(shí)的注意事項(xiàng)

基于Spring Boot使用JpaRepository刪除數(shù)據(jù)時(shí)的注意事項(xiàng)

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

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

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

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

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

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這玩意為什么會(huì)在插入前查詢一下了,查詢又是怎么個(gè)查詢方式了?這個(gè)應(yīng)該與主鍵ID有關(guān)系。所以改一下實(shí)體類,id統(tǒng)一為uuid模式。

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

效果明顯,問題立馬解決。但是有的系統(tǒng)主鍵ID是生成好的,有自己的規(guī)則,不可以隨便uuid,比如我這個(gè)系統(tǒng)就是,都是在各個(gè)系統(tǒng)里面已經(jīng)生成好了,而且還因?yàn)闃I(yè)務(wù)需要不能改。

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

不過話說回來,插入前查詢一下,這個(gè)功能是可以有,在大多數(shù)的業(yè)務(wù)場(chǎng)景也是很有用的。springboot的jpa就這樣,在系統(tǒng)中,具體怎么用,碼農(nóng)們各顯神通。

也算是趟過 springboot,jpa框架的兩個(gè)坑。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美视频一二三区| 精品美女一区二区三区| 欧美日韩色一区| 亚洲一区二区美女| 狠狠入ady亚洲精品| 久久夜色精品国产欧美乱极品| 激情丁香综合五月| 色婷婷国产精品久久包臀| 一区二区三区产品免费精品久久75| 极品少妇一区二区三区| 国产精品女主播av| 女生裸体视频一区二区三区 | 欧美一区三区二区| 美国欧美日韩国产在线播放| 色哟哟亚洲精品| 日韩av中文字幕一区二区| 免费在线国产精品| 性感美女极品91精品| 在线看片一区| 国产精品福利影院| 欧美在线三级| 久久嫩草精品久久久久| 99视频一区二区三区| 久久只精品国产| www.欧美色图| 久久综合给合久久狠狠狠97色69| av不卡在线观看| 国产亚洲欧美一级| 欧美视频福利| 亚洲色图丝袜美腿| 亚洲激情精品| 亚洲黄网站在线观看| 在线一区亚洲| 亚洲一区二区三区影院| 国产日韩在线一区二区三区| 夜夜嗨av一区二区三区网页 | 从欧美一区二区三区| 日韩一级完整毛片| 国产成人免费视频精品含羞草妖精| 欧美美女激情18p| 国产精品夜夜爽| 日韩精品一区二区三区视频在线观看 | 色综合中文字幕国产 | 99国产精品久久久久久久| 一个色综合网站| 色综合久久久久久久久久久| 日本在线观看不卡视频| 欧美日韩一二三| 成人午夜av影视| 久久久www成人免费毛片麻豆 | 免费观看久久久4p| 777色狠狠一区二区三区| 成人晚上爱看视频| 久久久久久久久久美女| 国产一区二区三区无遮挡| 亚洲素人一区二区| 久久久久久久尹人综合网亚洲| 亚洲乱码日产精品bd| www.色精品| 国产精品免费丝袜| 日韩一区二区久久| 日韩成人午夜精品| 4hu四虎永久在线影院成人| 99久久国产综合精品女不卡| 久久久国际精品| av成人毛片| 久久成人综合网| 精品久久久网站| 在线日韩av永久免费观看| 亚洲第一精品在线| 欧美一区二区三区视频在线| 色综合天天综合狠狠| 亚洲伊人伊色伊影伊综合网| 欧美日韩综合一区| 不卡视频一二三四| aa级大片欧美| 欧美日韩亚洲一区二区三区在线观看| 久久一二三国产| 亚洲欧洲久久| 亚洲成人自拍偷拍| 538在线一区二区精品国产| 国产欧美日韩伦理| 尤物在线观看一区| 欧美日韩精品系列| 99精品欧美| 日韩电影免费在线看| 欧美极品xxx| 蜜乳av一区二区| 日韩一级二级三级| 亚洲精品乱码久久久久久蜜桃91| 男女男精品视频网| 国产日韩精品一区二区浪潮av| 久久精品日产第一区二区| 丰满放荡岳乱妇91ww| 亚洲免费大片在线观看| 国产精品日韩精品欧美精品| 国产成人综合亚洲91猫咪| 亚洲欧美日韩国产中文在线| 在线电影国产精品| 在线观看欧美一区| 玖玖九九国产精品| 亚洲三级视频在线观看| 欧美久久久一区| 91久久精品www人人做人人爽| 九色综合狠狠综合久久| 亚洲色图20p| 欧美v亚洲v综合ⅴ国产v| 噜噜噜噜噜久久久久久91| 99精品视频在线播放观看| 日本视频中文字幕一区二区三区| 国产欧美一区二区精品忘忧草 | 国产成人精品免费在线| 一区二区激情视频| 久久久久9999亚洲精品| 欧美日韩性生活| 性刺激综合网| 欧美日韩在线精品| 国产精品一区二区在线播放| 亚洲一区二区精品3399| 日韩亚洲欧美在线| 久久国产精品亚洲77777| 午夜久久资源| 国产不卡免费视频| 免费成人av资源网| 亚洲欧美日韩国产手机在线| 精品国产乱码久久久久久1区2区| 日本韩国欧美一区| 一区二区欧美日韩| 欧美jjzz| 99久久久久久99| 精品亚洲成a人| 亚洲国产欧美在线| 成人免费视频在线观看| 精品成人在线观看| 欧美色图一区二区三区| 国产精品推荐精品| 欧美日韩日本网| www.亚洲人| 国产不卡视频在线观看| 麻豆91在线播放| 亚洲aaa精品| 亚洲欧美成人一区二区三区| 国产午夜精品福利| 日韩欧美一区二区三区在线| 日本韩国欧美在线| 亚洲一区成人| 激情久久久久久| 欧美88av| 成人午夜免费电影| 加勒比av一区二区| 香港成人在线视频| 国产精品久久夜| 国产欧美一区二区精品性色超碰| 日韩一区二区三区在线观看 | 欧美性生活大片视频| 久久久久91| 美女黄网久久| 亚洲一区黄色| 国产精品视频| 国产欧美日韩亚洲| 亚洲精品麻豆| 亚洲午夜电影| 99re视频精品| 成人精品一区二区三区四区| 国产成人免费在线视频| 国产老妇另类xxxxx| 国产精品一区在线观看乱码| 韩国女主播成人在线| 裸体一区二区三区| 蜜臀精品久久久久久蜜臀| 亚洲成年人网站在线观看| 亚洲午夜精品在线| 亚洲一二三区视频在线观看| 亚洲精品中文在线| 亚洲黄色在线视频| 亚洲一区二区欧美日韩| 亚洲成人午夜影院| 日韩精品五月天| 日本不卡在线视频| 免费亚洲电影在线| 久久99精品网久久| 国产精品1区二区.| 成人美女视频在线看| 91老师片黄在线观看| 国产伊人精品| 国产精品外国| 久久久久天天天天| 欧美午夜理伦三级在线观看| 欧美日本在线看| 日韩欧美在线1卡| 26uuu精品一区二区 | 日本不卡的三区四区五区| 国产一区在线观看视频| 成人一级黄色片| 91在线观看免费视频| 午夜日本精品| 一本一本久久| 久久看片网站| 欧美浪妇xxxx高跟鞋交| 欧美一级专区免费大片|