日期:2014-05-18  浏览次数:20739 次

b/s公交查询系统 hql(站站,站点查询)语句写不来了,总是报错,求救。。。
用的是mysql数据库,hql语句关联3个表的写不来,有木有大神写过类似,支个招- -
车次表(businfo) ( 车次号、起点站、终点站、票价、服务时间) 此为车次实体对应的关系模式,车次号为关系的主键,对应的表为businfo(公交车信息表) 。
字段名 字段类型 说明
bid Int 车次号,自动编号
begin varchar(50) 始发站 (非空)
end varchar(50) 终点站 (非空)
ticketnote varchar(20) 票价 (非空)
btime varchar(50) 出发时间 (非空)
etime varchar(50) 结束时间 (非空)
站台表(stinfo)(站台号、站台名、备注)。此为站台实体对应的关系模式,站台号为关系的主键。对应的表为stinfo (车站信息表)。
字段名 字段类型 说明
stid Int 站台号,自动编号
stname varchar(50) 站台名  (非空)
stnote varchar(200) 备注信息
经过表(busst) (车次号、站台号、经过的次序)。此为经过关系的关系模式,(车次号、站台号、经过的次序)为关系的主键。对应的表为busst (车次经过站点信息表)。
字段名 字段类型 说明
bid Int 车次号(非空)
stId Int 站台号(非空)
secid Int 站台在车次的次序(非空)
hibernate?hql?mysql

------解决方案--------------------
上面的作废
这个三个表的关联关系:
在车次表businfo的Int车次号去经过表busst里能把这个车次经过的所有站台号查出来,然后在用站台号去站台表stinfo里查到这个站台的信息  我理解的对不对?  你先说下你现在想要的结果吧 
------解决方案--------------------
select * from stinfo s,busst b,businfo m where  m.bid=b.bid and b.stId = s.stId 这样对吗? 
------解决方案--------------------

select * from businfo  bi inner join (select * from busst bs inner join stinfo si on bs.bid=si.stid ) bsi on bi.bid=bsi.bid 这样算是符合要求么
------解决方案--------------------
select stid from stinfo where stname=?
select bid from busst where stId=?(上边sql的结果)
select * from businfo where bid = ?(上句sql的结果)

然后自己拼成一条sql 再转换成hql
------解决方案--------------------
这种业务性的问题没有办法直接给你答案,建议楼主可以在网上查一下hibernate多表联查的相关资料,比如这个http://www.blogjava.net/ldwblog/archive/2013/09/12/403983.html,还可以再看看别的文章之类的。希望能帮到你。
------解决方案--------------------
写存储过程来做