2014-04-09 65 views
0

我使用GridGain作为我的数据对象(pojos)的本地内存中存储,我需要查询这些对象并选择具有特定值的适当值。让我们考虑以下情况:GridGain加入查询两个对象

class Person { 

    public Long id; 
    public String name; 
    public Organization organization; 
} 

class Organization{ 

    public Long id; 
    public String name; 
} 

您能否建议如何使查询来检索例如所有组织的人员? 我尝试以下:

final GridCacheProjection<GridCacheAffinityKey<Long>, Person> appCache = cache.projection(GridCacheAffinityKey.class, Person.class); 

final GridCacheQuery<Map.Entry<GridCacheAffinityKey<Long>, Person>> query = appCache.queries().createSqlQuery(Person.class, "from Person, Organization " + "where Person.organization.id = " + "Organization.id = ?"); 

但没有运气。我发现了很多使用Person.id = Organization.id =?的例子。然而,我有Organization作为Person类中的对象,因此如何以这种方式编写查询或检索数据?

在此先感谢您的任何提示。

回答

0

您的代码看起来不正确。

// Create query which joins on 2 types to select people for a specific organization. 
GridCacheQuery<Map.Entry<GridCacheAffinityKey<UUID>, Person>> qry = cache.queries(). 
    createSqlQuery(Person.class, 
     "from Person, Organization " + "where Person.orgId = Organization.id and " + 
     "lower(Organization.name) = lower(?)"); 

// Execute queries for find employees for different organizations. 
print("Following people are 'GridGain' employees: ", qry.execute("GridGain").get()); 
print("Following people are 'Other' employees: ", qry.execute("Other").get()); 
+0

德米特里您好,感谢您的回应:

在,它的加入部分看看在GitHub上可用CacheQueryExample(也随GridGain)

具体。我看到这个例子,并基于它创建我的代码。然而,由GridGain文档描述的场景期望您的对象(Person,Organization)是DB schema =>的准确表示,它们之间的引用是通过作为单个值的“外键”/ UUID完成的。然而,在我的数据模型中,我的Person类作为整个Organization对象的引用。因此,我没有可能仅仅通过将Person.id与Organisation.id与单个值进行比较来进行搜索。没有办法如何做到这一点?也许通过实施一些比较/平等的方法? – user3392697