日期:2014-05-20  浏览次数:20870 次

hibernate查询自关联表
小弟刚学hibernate不久,对于查询还不是很熟悉,现在有两张表,下面这张是自关联表,
SQL code
CREATE TABLE "server_position" (                              //服务器地点表
    "position_id" numeric(10,0) NOT NULL DEFAULT NULL,    //逻辑主键
    "position_name" varchar(30) DEFAULT NULL,             //地点名称
    "position_depth" numeric(2,0) NOT NULL DEFAULT NULL,  //结点深度
    "position_parent_id" numeric(10,0) DEFAULT NULL)     //父结点id

CREATE TABLE "public"."server" (                  //服务器表
        "server_id" numeric(10,0) NOT NULL,                   //逻辑主键
        "server_label" varchar(30) DEFAULT NULL,              //服务器标签
        "server_position" numeric(10,0) DEFAULT NULL)         //服务器地点,于服务器地点表position_id做关联



我地点表里面的数据是这样插的:
position_id position_name position_depth position_parent_id
1 中国 0 0
2 上海 1 1
3 黄浦区 2 2
3 徐汇区 2 2

我现在就想查 server表,用hibernate做映射的话得到server对象。
Java code
List list = this.getHibernateTemplate().find("FROM Server");


前端通过
Java code
server.getPosition().getPositionName()
只能得到server所在的叶子结点的信息,就比如得到的结果是“黄浦区”。
如何能把整条路径全显示出来?改变表结构也行(目前全部是自学的也不清楚这样设计表合不合理)。





------解决方案--------------------
常见的 “组”都是 内关联的 
hibernate 使用 m2o
 <many-to-one name="Group1" class="inc.xxx.persistent.entity.Group1" fetch="select">
<column name="PARENT_ID" precision="10" scale="0" />
 </many-to-one>
然后 自己在dao中再实现一个 迭代查询 这样就把树的叶子全取出来 具体使用那种结构来保存
自己选择。。