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

作者: NullLife (廢材大叔有點累)   2014-07-17 02:16:15
例如有某一張Table存放一家公司底下的處部等關係,
Aa ┬ Ba ┬ Ca ┬ Da
├ Bb ├ Cb └ Db ┬ Ea ┬ Fa
│ └ Cc └ Eb ├ Fb
└ Bc ┬ Cd ┬ Dc └ Fc
│ └ Dd ┬ Ec
└ Ce ┬ De └ Ed
├ Df
└ Dg
目前table已經做出階層式的關係,
class MyEntity {
@Id
@...
private Integer seq;
@ManyToOne
@JoinColumn(name="parent_seq")
private MyEntity parent;
@OneToMany
@JoinTable(
name="link"
,joinColumns = @JoinColumn(
name = "parent_seq"
,referencedColumnName = "seq"
)
,inverseJoinColumns = @JoinColumn(
name = "child_seq"
,referencedColumnName = "seq"
)
)
private Set<MyEntity> children;
...
}
現在寫入、跟一般查詢都很正常,
可以取到我要的資料,然後可以看到上下的關係
但如果處部有名字一樣的時候,我想查到某個支線下的處部關係,要怎麼做?
例如如下圖的 Ea 跟 Df 同時都叫"總務部"好了
Aa ┬ Ba ┬ Ca ┬ Da
├ Bb ├ Cb └ Db ┬ Ea ┬ Fa
│ └ Cc └ Eb ├ Fb
└ Bc ┬ Cd ┬ Dc └ Fc
│ └ Dd ┬ Ec
└ Ce ┬ De └ Ed
├ Df
└ Dg
然後今天我想找Ea這個部,底下還有細分那些部,
但我所擁有的條件,就只有 Aa Ba Ca Db Ea 的名字,
要怎麼做才能找到我要 Ea ?
因為如果直接條件下"總務部",我會得到兩筆資料,
然後兩筆要往上查看是否為我要找的支線,
要不然就變成是全查出來,然後遞迴去找到我要的 Ea...
這兩個方法都滿笨的,而且要寫不少code...
小弟我這兩天想破頭了,也有想調整結構,或者多Table來處理,
但都一樣很麻煩,省不了工...
所以上來請教一下各版大有沒有其他比較方便方法能達到這個目的?
感恩<(_ _)>
作者: LaPass (LaPass)   2014-07-17 10:10:00
同樣的問題 +1 其實這不只在java上會有這個問題.....只要是資料庫對上樹狀結構,應該都會有這個問題....
作者: yyc1217 (somo)   2014-07-17 10:19:00
把所有從root至leaf的路徑都變成一份record可以嗎?例如{Aa,Ba,Ca,Da,null,null}, {Aa,Ba,Ca,Db,Ea,Fa}, ...如果公司階層不常變,就開固定數目的欄位就好如果常變動,就只存在一個欄位中,然後用分隔符號分開例如"Aa|Ba|Ca|Da", "Aa|Ba|Ca|Db|Ea|Fa"這樣 用like搜尋不知道我有沒有誤解你的意思...
作者: swpoker (swpoker)   2014-07-17 12:01:00
是討論SQL還是討論JAVA的爬資料結構阿
作者: popcorny (畢業了..@@")   2014-07-17 12:23:00
其實每個用JPA久的都會遇到這個問題, JPA是個剛開始用很爽,系統大了就很難掌握的架構。
作者: cyclone350 (老子我最神)   2014-07-17 12:25:00
比較像是邏輯問題
作者: swpoker (swpoker)   2014-07-17 13:30:00
要想的是~是哪裡的總務部~還是無差別的總務部照你的需求~應該是Ba下的總務部-Ea所以應該要先去找Ba~然後再去Ba的子階層去找到符合總務部最主要還是總務部的定義為何?因為有的時候就是要上爬但我習慣先去定義總務部的範圍大概有哪裡~在去決定實作這個跟爬HTML的DOM沒甚麼兩樣阿~不然你就在Entity裡面弄幾個索引阿~~這樣就不用爬拉在建立資料結構的時候~同時建立相對的索引缺點是初始的比較耗資源~優點就是查詢方便阿但是資料有很多嗎~不然幾百筆資料遞迴一下很快拉
作者: kentyeh (kent)   2014-07-17 15:03:00
作者: NullLife (廢材大叔有點累)   2014-07-17 18:51:00
感謝各位大大,已有方法解決,感恩<(_ _)>
作者: luoqr (.....)   2014-07-18 08:49:00
JPA在多個JVM上跑 不知道有沒有對db lock做處理的solution?

Links booklink

Contact Us: admin [ a t ] ucptt.com