Java前辈们,帮我解决个开发上的问题

界面上省市区下拉框的value值是数字,存到加盟申请表里的provid,cityid,zoneid字段(Number)。真正的名称是在Area这个行区表里。
当我们查询加盟申请表并以表格显示一行行输出的时候,不希望显示出来的是provid,cityid,zoneid,这些数字.我要的是真正的省市区名称显示出来。
请问你们是怎么做的?
难道是循环Hibernater对加盟申请表查过来的List集合?再根据集合里每条记录的provid,cityid,zoneid去行区表里把相应的名称查过来,组装好后再一条条记录塞回List。最后再返回List到界面用标签输出????
感觉这样子好像很不好。我觉得应该是用其他方式做的吧。具体怎么做的,能告诉一下吗。谢谢。。。
外界Java开发普遍是用什么方式来处理这个情况的???
据说用pojo封装来做,但是查询到记录后到底怎么使用这个pojo来替换数据呢?谁能大概说明一下,非常感谢。

要说明一下的是我们的所有表都不设外键,全部通过程序控制的,所以在加盟申请表里没有AREA对象属性的。否则的话问题就好办了。

关于这种级联问题,首先跟你说明,需要多次查询,但是可以一次返回,不用访问多次
public class CtItems(){
List provList;
List cityList;
List zoneList;
//getter...
//setter...自己实现getter和setter
}
public class searchAction(){
CtItems citems=new CtItems();
public List findProvList(){//具体自己去实现};
public List findCityList(int pid){//具体自己去实现
List
};
public List findZoneList(int cid){//具体自己去实现};
先查询出

public ActionForward doExecute(){
citems.setProvList(findProvList());
int fpid=;//取Prov第一条里面的ID
citems.setCityList(findCityList(fpid));
int fcid=;//取City第一条里面的ID
citems.setfindZoneList(findZoneList(fcid));
}
}
按照这样来整的话,你只需要返回一个citems就可以了,这样做很简单吧

[quote]要说明一下的是我们的所有表都不设外键,全部通过程序控制的,所以在加盟申请表里没有AREA对象属性的。[/quote]

程序可以控制啊. 查询出来的ID,
再根据Area查询下;
2次查询就可以了吧. 貌似不是问题.

你不是有id关联吗?其实他的作用就相当于外键,只不过不能约束两个表而已。

1.改表存储
2.不行的话,就用关联查询就可以了哇。 select a.name, b.providid,b.cityid from area a,provate表 b where a.zoneid = b.zoneid

可以用AJAX技术 dwr来实现,异步请求。数据表建议加一个字段code
0001,00010002类似这样的编码串
比如:0001代表安徽省
00010001 合肥市
00010002 黄山市
00010003 宣城市
等等,以这样有规律的编码,组织数据,如果你选安徽省,只需要将它的code:0001传过去 然后sql语句 like '0001____' 不就可以了吗?

dwr如果你不会,上网搜一下就行了,我只是告诉你思路,希望对你有所帮助.

改表结构。
表里的每一项都应该有id 和 name两个字段,查出来就得了

使用c:call在布面中就可以取到了

表中不是有ID吗,通过id来做外键,然后关联查询

1,对于数据库设计就应该是这样的,数据表与字典表。
数据表利用id存储信息,后台处理业务逻辑的时候根据id处理业务
在于用户交互的时候查询字典表,把ID翻译成为正常的数据。

2,一般的程序在处理这个问题的时候,会有专门的处理字典表的类,通过特定的方法,由字典序号和ID查询对应的数据。
在显示的时候根据需要ID和对应的数据做为一组数据传递到前台或者只传递数据,不传ID。

补充一点

[color=red]难道是循环Hibernater对加盟申请表查过来的List集合?再根据集合里每条记录的provid,cityid,zoneid去行区表里把相应的名称查过来,组装好后再一条条记录塞回List。最后再返回List到界面用标签输出???? [/color]

这个说法基本上是对的,不过如前面说的,需要整理一个统一的字典表处理器。

根据架构设计的不一样,往前台传递的方式略有不同。

最后一点

[color=red]据说用pojo封装来做,但是查询到记录后到底怎么使用这个pojo来替换数据呢?谁能大概说明一下,非常感谢。 [/color]

如果你使用hibernate的话,就够大概如下

CityPojo{
cityid
cityName
cityComment
}
ProvPojo{
provid
provName
provComment
}

包含以上信息的POJO{
CityPojo
ProvPojo
}

在这种情况下,基本上不太需要字典数据的处理器了,hibernate会帮你完成这个工作。

数据库里面写个stored procedure。然后就轻松又方便。我不使用Hibernate的。如果是Hibernate的情况下,请查找与join相关的操作,比方建立父子表关系或者建立表间勾连关系的说明。

使用关联查询就可以做到啊,没用过hibernate,但估计hibernate肯定是能做到的

我们是用表码表来设置的:provid,cityid,zoneid分别代表不同的级别,
表码表的结构大致如下(根据不同还可以做得更细):
id 当前的ID
parent_id 所属父ID
name 名称
level   级别(当前的级别)
state 状态

你的ID的编码格式可以参照:
0001代表安徽省
00010001 合肥市
00010002 黄山市
00010003 宣城市

你可以根据parent_id 和级别level来查出你想要的数据,也可以跟据编码格式来做查询.像这样的做法,是目前比较流行的吧.

不清楚你的表结构。你的表机构应该差不多是这样吧
加盟申请表(provid,cityid,zoneid,.....)

行区表(provid,provname,cityid,cityname,zoneid,zonename)

查询的时候可以用
[code="sql"]select 加盟申请表.需要查询的字段,行区表.* from 加盟申请表,行区表 where 加盟申请表.provid = 行区表.provid and 加盟申请表.cityid = 行区表.cityid and 加盟申请表.zoneid = 行区表.zoneid [/code]
得到所有的数据,这时候provid,provname,cityid,cityname,zoneid,zonename都可以查到.如果你用hibernate可以建立加盟申请表和行区表之间的联系.加盟申请表对象中组合了行区表对象,那么查询时加盟申请表对象时通过连接可以将关联的行区表对象查询出来.
在前台时显示时可以这样
[code="jsp"]

provname
.............


cityname
............


zonename
............

[/code]