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