我正在创建一个CRUD页面。在该页面上,我从表中选择数据取决于子查询结果。 我在页面上使用嵌套查询,但它无法正常工作。
查询是:
from incident as i where i.sysid in(select s.SYSID from sys s, sgroups g, ugroups u
where s.sid = g.SID and u.GId = g.GId and
u.ID = %{#securityUtils.subject.principal.asList().get(0)})
但是,嵌套查询
select s.SYSID from sys s, sgroups g, ugroups u
where s.sid = g.SID and u.GId = g.GId and
u.ID = %{#securityUtils.subject.principal.asList().get(0)}
如果执行它,正在工作..
答案 0 :(得分:2)
您可以尝试以不同方式重新编写查询。 一种方法是展平查询(不使用子查询):
select i from incident as i, sys s, sgroups g, ugroups u
where i.sysid = s.SYSID and s.sid = g.SID and u.GId = g.GId and
u.ID = %{#securityUtils.subject.principal.asList().get(0)}
另一种方法是使用点符号来导航关系:
from incident as i where i.fk1.fk2.fk3.ID =
%{#securityUtils.subject.principal.asList().get(0)}
请注意,您必须将fk1 / fk2 / fk3替换为实际的外键名称(如果表上有外键约束)。 Portofino将所有关系映射为具有外键名称的属性。
我没有测试过这个,因为我没有你的数据库。如果您需要更多信息,请提供更多详细信息:日志中是否存在异常堆栈跟踪?查询返回没有结果吗?