2012-04-16 60 views
2

我已經搜索了一段時間StackOverflow現在,但迄今尚未成功。 因此,創建這個問題...使用選擇性@Entity

我目前使用JPA,但我遇到了一個問題(至少,對我來說)。這裏的情況是: 我創建了一個系統,用戶可以被刪除,但不能從數據庫中刪除(爲了保留這個特定用戶的命令)。爲了這個工作,我簡單地向實體用戶添加了一個布爾值。迄今爲止所有的好處,但是這裏有棘手的部分。由於系統的使用不需要任何「刪除」用戶,我不想從數據庫中檢索它們。

有什麼方法可以爲@Entity註釋添加某種語句嗎?或者我不應該在這種情況下使用@Entity?

在此先感謝您的幫助!

PS。我不是在尋找一種解決方案,我不得不創建某種User_OLD表。

+0

您使用哪種JPA實現? – axtavt 2012-04-16 13:11:53

+3

不確定要了解...爲什麼你不能只選擇已刪除標誌= 0的用戶?這是一個簡單的數據庫字段,它被映射爲你的@Entity用戶的布爾屬性,你可以使用這個屬性來過濾項目... – perissf 2012-04-16 13:12:29

+0

好吧perissf,我正在尋找一個解決方案使用註釋,似乎是不可能的雖然。我現在確實試圖添加這個WHERE子句,但正如我在梅爾尼克的回答中所說的那樣,我不確定我的解決方案是否正確。 – Aquillo 2012-04-16 13:55:52

回答

3

首先,我建議將「已刪除」列重命名爲「不活動」,因爲您不會刪除用戶。

要檢索的實體,有兩個選擇:

  • 在數據庫基礎上不活躍==虛假創建USER_ACTIVE VIEW和 改變你的@Entity使用USER_ACTIVE視圖。
  • 在從USER表中檢索時添加WHERE inactive == false子句。

如果你有實體,它擁有用戶的集合,其中標註有@ FetchType.LAZY:

  • 在需要時以相同的where子句如上定義取用戶。
+0

感謝您的建議! 太糟糕了,這是不可能的註釋.. – Aquillo 2012-04-16 13:49:30

+0

我想添加一個WHERE子句,沒有問題。雖然,我只設法將這個WHERE子句添加到方法findAll()中。這仍然意味着由於延遲加載,JPA會默認獲取所有用戶,或者不是嗎?只編輯這種方法就足夠了嗎? – Aquillo 2012-04-16 13:53:24

+0

如果你的findAll()方法(這將是findActive(),如果你只是檢索活動用戶)查詢帶有檢索條件的實體,那就沒問題。 LazyLoading是什麼意思? – JMelnik 2012-04-16 14:39:17