下面的 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
但不是 Country
或 ContactName
。
我的订单模型对象就像类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:GORM 中默认的 equals() 实现是啥?