0

我正在创建一个 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)}

如果执行它正在工作..

4

1 回答 1

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 将所有关系映射为具有外键名称的属性。

我没有测试过这个,因为我没有你的数据库。如果您需要更多信息,请提供更多详细信息:日志中是否有异常堆栈跟踪?查询没有返回结果吗?

于 2013-06-06T12:38:37.497 回答