首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从JDOQL到HQL跨多个表移植连接查询

如何从JDOQL到HQL跨多个表移植连接查询
EN

Stack Overflow用户
提问于 2011-01-29 11:28:51
回答 1查看 10K关注 0票数 1

我正在将KodoJDO的应用程序移植到Hibernate。我有一个查询,它跨越数据库中的4个表,以及java代码中的3个对象。

在英文中,查询是查找系统X中有应享权利的用户。

我在User对象上调用的JDOQL子句位于entitlements.contains(ent) &( ent.system.id )=‘EVPN’的位置。

执行查询的一些sql是:

代码语言:javascript
复制
 select unique(u.id)
 from USER u, USERENTITLEMENT ue, ENTITLEMENT e, SYSTEM s
 where u.id = ue.userid
 and ue.entitlementid = e.id
 and e.systemid = s.id
 and s.id = 'evpn'

我对HQL的最佳猜测给了我一个例外

代码语言:javascript
复制
org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: ( [select user from com.ebig.entity.User as user, com.ebig.entity.Entitlement as ent, com.ebig.entity.System as sys where  entitlements.contains(ent) and ent.system = sys and sys.id  = 'evpn']

数据库的结构如下:

代码语言:javascript
复制
 User
   id

 UserEntitlement
   userid
   entitlementid

 Entitlement
   id
   systemid

 System
   id

java代码的结构如下:

代码语言:javascript
复制
 class User 
 {
    String id;
    Set<Entitlement> entitlements;
 }

 class Entitlement
 {
    String id;
    System system;
 }

 class System
 {
    String id;
 }

更新我的最后一个查询

代码语言:javascript
复制
            hqlQuery = "select distinct user from User as user "+
        "inner join user.entitlements as entitlement inner join entitlement.system as system "+
        "where  system.id  = 'evpn'  AND mod(user.flags, 2) = 0  AND source = 1";

是的,我知道我应该使用参数,但我有很多问题要解决,并将在以后的一天内发布这段代码。

另一种对系统权利的内隐连接的变体

代码语言:javascript
复制
        hqlQuery = "select distinct user from User as user "+
        "inner join user.entitlements as entitlement "+
        "where  entitlement.system.id  = 'evpn'  AND mod(user.flags, 2) = 0  AND source = 1";
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-29 12:17:49

您应该使用联接:

代码语言:javascript
复制
select distinct u.id from User u
inner join u.entitlements as entitlement
inner join entitlement.system as system
where system.id = :evpn

其中:evpn是必须绑定的命名参数。

在执行HQL时,必须考虑对象和对象之间的关系,而不是表、外键和联接表。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4836599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档