Re: [問題] 請問JPA如何做階層式查詢

作者: NullLife (廢材大叔有點累)   2014-07-17 13:35:30
: 寫 code 難免
: 我講一下我的解決方案
: 首先,部門應該要有部門代號 (table的pk或是entity的@Id)
: 查詢時可以把部門代號當條件
我的確是有seq(就像是部門代號),
但是我今天送進來的條件就是"名字",整個支線每個節點的名字
: 舉個例來說,你去商店說你要HTC手機,店員會問你型號
: 不然誰曉得你要哪一隻?
: 店員也可以把所有HTC手機拿出來給你選。
: 總之不可能心電感應就對了。
: 第二種是往上檢查的 JPQL
: 假設 samsung 手機型號是這樣悲慘的分類
: Samsung ─ galaxy ┬ S ─ 3
: └ Tab ─ 3
: 首先要查 "3",會查出兩個
: 所以要把父節點當作查詢條件
: select x from x where x.name=(?1) and x.parent=(?2)
: ?1 就給 String
: ?2 就給 Entity
: 這兩種方式雖然不能說是完美解,但在邏輯上說得通。
: 有清楚的邏輯,就算要寫code,應該也不會太笨吧?
: 如果真的覺得寫code很麻煩,改scheme很麻煩的話
但是這樣只能送兩層,就像我舉 Ea 的例子,
假設好死不好 Ea 跟 Df 上一層 都叫做同樣的名字,
那這樣還是會查出兩筆~
*不過我在寫入的時候已經控制好,樹狀結構不會有重複的情況,
也就是說最多最多到B那一層,名字就一定不一樣,會分開了,
但B各支線向下或許有可能會有同樣的節點名稱
: 有 framework 是可以到這種程度的
: @Query("select x from x where x.name=(?1) and x.parent=(?2)")
: public MyEntity myAutoQuery(String name, MyEntity parent);
: 就寫好了。
這個我在孤狗一下,感謝提供資訊<(_ _)>
: 另外,程式這東西一定要有規則綁住,不然會很麻煩
: 例如:"萬一我部門代號也重覆怎麼辦"
: 就不要讓他重複阿,重複就代表資料有問題,要去找到為什麼會重複
: 而不是去想 "代碼重複後我要怎樣做才能只輸入代碼就只查到一筆資料"
: 就像如果有人問說
: "我的電腦只要拔掉電源線就會關機,你能讓我的電腦拔掉電源線不關機嗎?"
: 我們要解的是不要讓 user 腳賤一直踢到電源線,
: 而不是真的讓電腦可以在無電底下運作
作者: cyclone350 (老子我最神)   2014-07-17 14:05:00
如果是想提供api的話,可以用不定長度引數的method來generate SQL達到麵包屑查詢,但還是要寫程式XD
作者: NullLife (廢材大叔有點累)   2014-07-17 18:51:00
感謝各位大大,已有方法解決~
作者: cyclone350 (老子我最神)   2014-07-17 19:11:00
可以提供方法嗎? (敲碗)
作者: pupuliao (pupu)   2014-07-17 21:08:00
要是我 我會選擇直接建二維表下去...
作者: swpoker (swpoker)   2014-07-18 09:29:00
這樣不行喔~既然想到了~那要分享一下才可以阿~parentStratum可以在異動的時候產生就可以了怎麼覺得好像跟JAVA無關~是資料庫設計有關的阿我還是比較喜歡使用java爬資料 XD
作者: NullLife (廢材大叔有點累)   2014-07-18 12:45:00
好吧,對不起QQ 因為我一開始是想說JAP是否有相關機制可以做到我想要的結果,所以上來問
作者: swpoker (swpoker)   2014-07-18 15:22:00
結果還是SQL!!! XD

Links booklink

Contact Us: admin [ a t ] ucptt.com