簡體   English   中英

Hibernate的; HQL; 為什么刪除查詢不起作用,但選擇呢?

[英]Hibernate; HQL; why does the delete query not work, but select does?

我想從表中刪除某些記錄。 這些記錄在其他表中有一些子記錄。

為了能夠刪除主記錄,我必須先刪除子記錄。

以下是使用的HQL示例:

delete from ItineraryBooking ib where ib.booking.user.id = :paramId

基本上,這應該刪除所有ItineraryBookings(單獨表中的記錄),這些都加入到Booking表中。 可以使用User表連接Booking表。

奇怪的是,當您將上述內容更改為:

from ItineraryBooking ib where ib.booking.user.id = :paramId

並執行Query.list(),它會正常工作。

每當我想執行delete變體時,看起來Hibernate會生成一個奇怪的刪除語句。 我的HQL錯了嗎? 還是Hibernate的怪癖?

休眠手冊

在批量HQL查詢中不能指定隱式或顯式的連接。 子查詢可以在where子句中使用,子子查詢本身可以包含連接。

您的ib.booking.user.id子句看起來像是對我的加入。 我不知道Hibernate是否主動拒絕刪除語句中的連接,或者只是默默地弄錯了。

刪除子記錄的更好方法是使用級聯刪除

可能有幫助的簡單問題:

  1. 只是為了好奇,你在交易中運行這個HQL嗎? 選擇不需要事務,但刪除確實需要它。

  2. 你在執行刪除HQL后刷新會話嗎?

  3. 您是在刪除,在同一交易中選擇還是在單獨的交易中選擇?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM