如何使用条件查询或executeQuery在
select * from table1 as t1 left Join(select * from table2 where id=2)as t2 On t2.table1=t1.id ;
答案 0 :(得分:0)
与查询表的SQL不同,GORM / Hibernate查询查询域类。是的,它归结为表,但从Criteria,WHERE和HQL的观点来看,它是域类。正如Koloritnij指出的那样,这就是为什么域模型的知识对于编写查询是必要的。
SQL和GORM执行连接的一个区别是SQL连接是在SQL本身中即时创建的。而GORM连接由域类关联预先确定。这意味着在HQL中您无法加入子查询。您可以阅读有关此类差异的更多信息here。
话虽如此,使用您的示例SQL我假设您的域模型:
class DomainA {
}
class DomainB {
DomainA a
}
在上面的域模型中,DomainB
(table2)具有单向many-to-one association和DomainA
(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("""....""")