为什么我的子查询无法在ManyDesigns Portofino的CRUD页面上工作?

时间:2013-06-04 11:47:44

标签: hql crud

我正在创建一个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)}
如果执行它,

正在工作..

1 个答案:

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

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