2012-10-25 71 views
0

我在我的數據庫USERS和USER_SESSIONS中有兩個表。 USER_SESSIONS具有映射到用戶表的用戶ID的用戶ID外鍵,並且我已經定義,在Hibernate中的許多一對一的關係:如何刪除外鍵關係中的所有孩子

<many-to-one name="user" column="USERID" class="com.Users" /> 

我怎樣寫一個休眠的方法來刪除所有行給定用戶的USER_SESSIONS數據庫時,只給予用戶名。

我的第一次嘗試是加載給定用戶名的用戶對象,然後執行HSQL刪除該用戶的用戶ID的所有會話。有一種更簡單的方法嗎?

+3

即使父行仍然存在,是否要刪除所有子項? – smk

+1

您可以使用HQL刪除記錄:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/batch.html#batch-direct。使用像'刪除UserSession us us whereUser =:user'這樣的查詢。也就是說,如果你還刪除了擁有User的用戶,最好是級聯。 – millimoose

+0

@Sajit是的我希望用戶留下來,但我想刪除他們的所有會話。例如,當用戶註銷時,我想註銷其所有會話,在這種情況下涉及從數據庫中刪除行。我希望這更有意義。 –

回答

2

我想一個其他的方式可以爲:

  1. 定義級聯作爲delete的關係
  2. 加載用戶實體
  3. 從用戶刪除所有用戶會話對象
  4. 保存用戶實體回。
+0

這會工作,但用戶實體不知道他們的會話。這不是雙向的多對一關係。 –

+0

在這種情況下,HQL'(刪除UserSession u,其中u.User =:user)'是選項。 –

相關問題