可以在两个域 class 之间进行内部联接吗?

Its posible to make inner join between two domain class?

如果我有两个域名class

Class一个

Class A {
 int product_id
 int price
 String store
}

Class B

Class B{
int product_id
String product_desc
}

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

不知道这个方法对不对,如果不对请指导我做出最好的表现

答案是……视情况而定。

如果你直接通过运行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

在本例中,我使用了动态查找器,但也有 where 查询、条件查询和 HQL。我有一系列关于这些的文章here

注意:上面的代码是一个近似值,因为您发布的域 类 已经过良好的清理,我无法判断到底发生了什么。但它应该能让您了解各种可能性。