下面的 SQL 的 GORM(grails) 标准是啥?

Posted

技术标签:

【中文标题】下面的 SQL 的 GORM(grails) 标准是啥?【英文标题】:What will be GORM(grails) criteria below's SQL?下面的 SQL 的 GORM(grails) 标准是什么? 【发布时间】:2020-07-21 15:57:22 【问题描述】:

下面的 SQL 中的 grails GORM 标准是什么

订单表:

订单号 客户 ID 订购日期

客户表:

客户 ID 客户姓名 联系人姓名 国家

请注意,“订单”表中的“客户 ID”列指的是 “客户”表中的“客户 ID”。之间的关系 上面的两个表是“CustomerID”列。 然后,我们可以创建以下 SQL 语句(包含一个 INNER JOIN),它选择两个表中具有匹配值的记录:strong text

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

Sql 将使用这些列生成这些数据

订单编号 客户名称 订购日期

GORM 模型:

class Order

Long orderId
Long customerId
def orderDate


class Customer

Long customerID
Long customerName
def contactName
def country




【问题讨论】:

到目前为止您尝试了哪些但没有成功? 您显示的 SQL 对应于您的持久性模型,它可能会或可能不会直接映射到您的对象模型。当使用 GORM 表达查询时,您总是根据您的对象模型而不是持久性模型来表达查询。要确定如何表达查询,您需要显示您的 Orders 类与您的 Customers 类(或映射到这些表的任何类)之间的关系。是不是你有一个 Orders 类,其中有一个名为 OrderDate 的属性,它引用另一个名为 Customers 的类的实例? 详情w3schools.com/sql/sql_join.asp@JeffScottBrown 问题已更新详细信息@JeffScottBrown @Tanvir。您正在描述持久性模型,而不是对象模型。 GORM 要求您根据对象模型来表达您的查询。您是否有一个 Orders 类,其中有一个名为 OrderDate 的属性,该属性引用另一个名为 Customers 的类的实例?我问的是课程,而不是桌子。 【参考方案1】:

我正在做一些猜测,以创建一个与您在那里描述的持久性模型相匹配的对象模型。

class Customer 
    String customerName
    String contactName
    String country

    static mapping = 
        table 'Customers'
        version false
        id column: 'CustomerID'
        customerName column: 'CustomerName'
        contactName column: 'ContactName'
        country column: 'Country'
    

class Order 
    Customer customer
    Date orderDate

    static mapping = 
        table 'Orders'
        version false
        id column: 'OrderID'
        customer column: 'CustomerID'
        orderDate column: 'OrderDate'

    

执行这样的查询:

Order.findAll 
    createAlias 'customer', 'cust'
    projections 
        property 'id'
        property 'orderDate'
        property 'cust.customerName'
    

这将导致这样的 SQL:

select this_.OrderID as y0_, this_.OrderDate as y1_, cust1_.CustomerName as y2_ from Orders this_ inner join Customers cust1_ on this_.CustomerID=cust1_.CustomerID

【讨论】:

此代码满足问题中描述的请求,我假设您需要投影,因为您正在检索 CustomerName 但不是 CountryContactName 我的订单模型对象就像类Order Long customerId Date orderDate static mapping = table 'Orders' id column: 'OrderID' orderDate column: 'OrderDate' 有问题添加的gorm模型 您在问题中发布的模型与您作为需求表达的SQL不一致。列名将不匹配。您真的只是想知道如何检索Order 实例及其关联的Customer?如果是,只需致电Order.list() @Tanvir 祝你好运!

以上是关于下面的 SQL 的 GORM(grails) 标准是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Grails/GORM 中定义默认排序顺序

如何批量删除 Grails/GORM 中的记录?

GRAILS / GORM:动态多重连接

Grails + GORM:GORM 中默认的 equals() 实现是啥?

Grails/GORM 中的错误:已删除的对象将被级联重新保存

Grails 查询不使用 GORM