Какими будут критерии GORM (grails) ниже SQL? - PullRequest
2 голосов
/ 09 апреля 2020

Какими будут критерии GORM Grails, приведенные ниже SQL

Таблица заказов:

  • OrderID
  • CustomerID
  • OrderDate

Таблица клиентов:

  • CustomerID
  • CustomerName
  • ContactName
  • Страна

Обратите внимание, что столбец «CustomerID» в таблице «Orders» относится к «CustomerID» в таблице «Customers». Отношения между двумя таблицами выше - это столбец «CustomerID». Затем мы можем создать следующий оператор SQL (который содержит INNER JOIN), который выбирает записи, имеющие совпадающие значения в обеих таблицах: строгий текст

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

Sql будет производить эти данные с этими столбцами

  • OrderID
  • CustomerName
  • OrderDate

МОДЕЛЬ GORM:

class Order{

Long orderId
Long customerId
def orderDate
}

class Customer{

Long customerID
Long customerName
def contactName
def country
}



1 Ответ

0 голосов
/ 11 апреля 2020

Я делаю некоторые предположения, чтобы создать объектную модель, которая соответствует описанной вами модели персистентности.

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
...