亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring boot jpa 刪除數據和事務管理的問題實例詳解

發布時間:2020-09-08 18:47:15 來源:腳本之家 閱讀:520 作者:hanghangde 欄目:編程語言

今天我們介紹的是jpa刪除和事務的一些坑,接下來看看具體內容。

業務場景(這是一個在線考試系統)和代碼:根據問題的id刪除答案

repository層:

int deleteByQuestionId(Integer questionId);

service 層:

public void deleteChoiceAnswerByQuestionId(Integer questionId) {
choiceAnswerRepository.deleteByQuestionId(questionId);

測試層:

@Test
public void testDeleteByQuestionId() {
 choiceAnswerService.deleteChoiceAnswerByQuestionId(5);
 System.out.println("hehehhe");
 System.out.println("hehehhe");
 System.out.println("hehehhe");
 System.out.println("hehehhe");
 System.out.println("hehehhe");
 System.out.println("hehehhe");
 System.out.println("hehehhe");
}

問題1:如果各層都不加事務管理的話
@Transactional

會報這個錯誤

org.springframework.dao.InvalidDataAccessApiUsageException: No EntityManager with actual transaction available for current thread - cannot reliably process ‘remove' call; nested exception is javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process ‘remove' call

當我們除了query外的modiy和delete外如果沒有各層的方法中進行事務管理的話也就是沒加@Transactional話會報錯

問題2:只在test層加@Transactional
沒有錯誤但是數據并沒有被刪除,在用IDEA的調試是,在執行這個測試方法的過程時還可以在choiceanswer表中進行操作并沒有加鎖事務并沒有起作用

問題3:只在 Repository層加@Transactional

public void deleteChoiceAnswerByQuestionId(Integer questionId) {
choiceAnswerRepository.deleteByQuestionId(questionId);
System.out.println(“hehehhe”);
System.out.println("hehehhe");
// questionRepository.delete(5);
System.out.println(“hehehhe”);
 System.out.println("hehehhe");
 System.out.println("hehehhe");
 System.out.println("hehehhe");
 System.out.println("hehehhe");
}

這時當執行完

choiceAnswerRepository.deleteByQuestionId(questionId);


數據里面被修改

問題4:只在 service層加@Transactional

當只有執行完service內的對應方法時數據才會被刪除

問題5:在service 層和Repository都加上@transactional

當只有執行完service內的對應方法時數據才會被刪除

問題6:只要在test(或者是除了service層和Repository層)加上@Transactional,不管service層和Repository層加不加@Transactional數據都不會被刪除

問題7:

@Modifying
@Query(“delete from ChoiceAnswer c where c.question.id=?1 “)
@Transactional
int deleteByQuestionId(Integer questionId);


@Transactional
int deleteByQuestionId(Integer questionId);

有什么區別,上面的會直接執行delete語句

下面的會先執行select 再執行delete

總結:

事務管理只有在service加上事務管理才起作用,query不需要事務管理但是delete update但需要事務管理為了不在Service層不加事務管理可以再Repository層的delete uodate加上@transactional 但這樣不能真正保持事務的完整性.

本文關于Spring boot jpa 刪除數據和事務管理的問題實例詳解的介紹就到這里,希望對大家有所幫助,歡迎大家參閱本站其他專題。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

墨竹工卡县| 肇庆市| 昭通市| 北海市| 永清县| 阜南县| 锦屏县| 博乐市| 库车县| 永昌县| 西乌珠穆沁旗| 兴海县| 绿春县| 兴安县| 色达县| 广南县| 黄石市| 赣榆县| 天祝| 高尔夫| 桂阳县| 襄城县| 北宁市| 赫章县| 古交市| 余江县| 嘉鱼县| 万源市| 固原市| 东乌珠穆沁旗| 年辖:市辖区| 江阴市| 封开县| 衡东县| 大足县| 珠海市| 平昌县| 金乡县| 兖州市| 垦利县| 吴江市|