左边用Grails中的Sub Query加入?

时间:2015-12-29 10:42:35

标签: spring hibernate grails gorm hibernate-criteria

如何使用条件查询或executeQuery在中编写以下查询?

select * from table1 as t1 left  Join(select * from table2 where id=2)as t2 On  t2.table1=t1.id ;

2 个答案:

答案 0 :(得分:0)

与查询表的SQL不同,GORM / Hibernate查询查询域类。是的,它归结为表,但从Criteria,WHERE和HQL的观点来看,它是域类。正如Koloritnij指出的那样,这就是为什么域模型的知识对于编写查询是必要的。

SQL与GORM

SQL和GORM执行连接的一个区别是SQL连接是在SQL本身中即时创建的。而GORM连接由域类关联预先确定。这意味着在HQL中您无法加入子查询。您可以阅读有关此类差异的更多信息here

一个例子

话虽如此,使用您的示例SQL我假设您的域模型:

class DomainA {
}

class DomainB {
    DomainA a
}

在上面的域模型中,DomainB(table2)具有单向many-to-one associationDomainA(table1)。与SQL的HQL 类似如下:

def hql = 'SELECT a, b FROM DomainB AS b RIGHT OUTER JOIN b.a AS a WHERE b.id = :id'

HQL可以像这样执行:

def result = DomainB.executeQuery(hql, [id: 2])

答案 1 :(得分:0)

在这里(如果你有带外键的域类):

def query
query = sessionFactory.getCurrentSession().createCriteria(table2.class)
query = query.createAlias("table1", "table1Alias",  CriteriaSpecification.LEFT_JOIN, Restrictions.in( 'table1Alias.id', 'table2.id'))
Restrictions.eq( "id", 2)

如果没有,则必须使用原始SQL:

def dataSource
Sql sql = new Sql(dataSource)
sql.exequteQuery("""....""")