2014-04-07 66 views
1

林具有域ID,姓名,parentItem和類別(布爾)域對象的項目。的Java,休眠瞬變場

ID名稱parentItem類
1工具NULL 1
2電動工具1個
3個小工具2 1
4實際刀具前端子項目3 0

:像數據庫 這樣的IM插入值

所以實際項目是在類別/路徑「工具/電動工具/小工具」

所以我需要通過categoryName/categoryPath實現懶過濾器搜索。 例如:如果DataTable中過濾用戶輸入「電」我需要(如果存在的話在這個例子中的小工具和所有其他)返回在「電動工具」類別和所有項目的所有項目從subcategorys。

所以目前我有在使用遞歸以獲得項目路徑中的Java域對象@Transient場。 但我無法搜索瞬態字段。我的意思是我不能在數據庫中執行搜索,因爲這個字段是:
1.瞬態
2.使用遞歸,如果我需要在其他數據庫版本上部署應用程序,我將不得不重寫遞歸sql數據庫或其他東西。我不喜歡這個

任何人都可以點我到一些聰明的,獨特的解決方案? 任何想法,建議表示讚賞。謝謝!

回答

1

這個問題看起來很相似:HQL recursion, how do I do this?

簡而言之:你不能在HQL做遞歸。你最好的賭注是:

  • 撰寫本地查詢做到這一點(是的,你將不得不與每一個數據庫移動到重寫它,因爲遞歸查詢是不是標準的SQL)
  • 使用連接列有父母/子女的對象並遍歷&過濾器在內存產品樹(使用更多的內存,因爲你預裝的一切,但只命中一次DB)
  • 讓多個查詢,如果你知道你的樹是不是太深了。 (節省內存,但很多數據庫的工作)
+0

你好。我所做的是:現在我在Item實體中將它的類別路徑存儲爲字符串。所以當用戶保存項目時,我正在計算它的路徑並將其保存在數據庫中。爲什麼這個 ?因爲目前它是最快的解決方案。謝謝Ordous – jNick