如果我有两个域类
A类
Class A {
int product_id
int price
String store
}
和 B类
Class B{
int product_id
String product_desc
}
现在在我的控制器中,我想知道是否有一种方法executequery通过 product_id 进行内部连接以获取产品的描述
我不知道这是否正确,如果我错了请指导我做出最佳性能
答案 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
}
在上面的示例中,A
与B
具有多对一关联。因此,一旦您拥有A
的实例,就可以访问B
:
def a = A.findByProductId(1)
def desc = a.b.product_desc
在这种情况下,我使用了动态查找程序,但也有查询,条件查询和HQL。我有一系列关于这些here的文章。
注意:上面的代码是一个近似值,因为您发布的域类已经过很好的清理,我无法分辨出真正发生的事情。但它应该让你了解可能性。