它可以在两个域类之间进行内连接吗?

时间:2016-02-16 13:30:01

标签: grails gorm inner-join

如果我有两个域类

A类

Class A {
 int product_id
 int price
 String store
}

B类

Class B{
int product_id
String product_desc
}

现在在我的控制器中,我想知道是否有一种方法executequery通过 product_id 进行内部连接以获取产品的描述

我不知道这是否正确,如果我错了请指导我做出最佳性能

1 个答案:

答案 0 :(得分:1)

答案是......这取决于。

如果通过运行SQL直接访问数据库,则可以创建内部联接。

A.withNewSession { session ->
    session.createSQLQuery('SELECT B.product_desc FROM A INNER JOIN B ON A.product_id = B.product_id' WHERE A.product_id = 1).list()
}

如果这是你想要的,你可以在我的文章here中阅读更多相关内容。

但是既然你正在使用Grails,那么你最想要的就是使用GORM,这是Grail的对象关系映射器。但是,GORM / Hibernate不允许您像使用SQL一样即时创建联接。你甚至不能用HQL做到这一点。相反,您需要事先定义域类之间的关联:

Class A {
    int product_id
    int price
    String store
    B b
}

Class B{
   int product_id
   String product_desc
}

在上面的示例中,AB具有多对一关联。因此,一旦您拥有A的实例,就可以访问B

def a = A.findByProductId(1)
def desc = a.b.product_desc

在这种情况下,我使用了动态查找程序,但也有查询,条件查询和HQL。我有一系列关于这些here的文章。

注意:上面的代码是一个近似值,因为您发布的域类已经过很好的清理,我无法分辨出真正发生的事情。但它应该让你了解可能性。