HIHERNATE双表查询

caibaoying 2008-06-25 03:25:04
a、类型表(类型ID、类型名称、父类型ID)t_protype(proclassid,TypeName,profclassid)
b、资源表(资源ID、类型ID、资源名称、适用科室)t_article(articleid,proclassid,articleName,remark)

类型表有多层,类似于树状结构。 节点1--子节点1--孙节点1
--孙节点2
--孙节点3
子节点2--孙节点4
--孙节点5
...................................

如何通过类型ID,查找所有属于它的资源列表,其中包括所有属于它的子节点所包含的资源?


select f.articleid,f.title from T_Article f where f.proclassid in(select proclassid from T_Protype start with proclassid='8a71e0fa1a3e009e011a46e9d73f0011' connect by prior proclassid = profclassid)

经测试在PLSQL 环境下能运行出结果:找到'8a71e0fa1a3e009e011a46e9d73f0011' 结点下的所有资源

换成HQL语句 from T_Article f where f.proclassid in(select proclassid from T_Protype start with proclassid='8a71e0fa1a3e009e011a46e9d73f0011' connect by prior proclassid = profclassid)
出错:
Caused by: java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)

2008-06-25 15:23:02,046 ERROR [org.hibernate.hql.PARSER] - line 1:129: unexpected token: with;

HIBERNATE3.1 不支持多表查询?或者不支持ORACLE中的 start with .... connect by 递归.
谢谢各位大狭指点:
...全文
150 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hupeisen 2008-09-05
  • 打赏
  • 举报
回复
学习
dvictor 2008-06-26
  • 打赏
  • 举报
回复
我是用递归加栈实现的 表结构和lz的差不多 还多了张权限表
sql没能实现的了 最后改用代码实现了 呵呵
thunderclap 2008-06-26
  • 打赏
  • 举报
回复
mark
caibaoying 2008-06-25
  • 打赏
  • 举报
回复
恩`查了半天资料 都说不支持```不过是可以直接执行SQL语句
胡矣 2008-06-25
  • 打赏
  • 举报
回复
纠正一下 是hibernate
你这样无法转换的
可以直接执行sql
老紫竹 2008-06-25
  • 打赏
  • 举报
回复
1 当然不支持,那是oracle的极特殊的功能
2 你用过preOrder 算法吗? 就是有left right level的算法,这个可以用普通的SQL语句查出整个树,不过insert和update比较累一点。

参考这个看看http://www.java2000.net/viewthread.jsp?tid=163
对于不是经常变更的树,或者查询性能优先的树,非常适合!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧