【发布时间】:2016-09-14 08:05:47
【问题描述】:
我使用 Grails 3.2.0.M2 和 PostgreSQL 9.4.1。
我正在创建以 JSON 形式返回销售数据的 Web API。 网址是这样 http://localhost/sales?userId=001&limit=10
共有三个域类,分别是销售、销售明细和项目域类,如下所示。
class Sales {
String id
String userId
static hasMany = [salesDetail: SalesDetail]
}
class SalesDetail {
String id
int count
int status
static belongsTo = [sales: Sales, item: Item]
}
class Item {
String id
String itemName
int price
}
我想加入这些域并按条件检索数据并限制销售行数。 例如,如果我得到 http //localhost/sales?limit=2 在域数据如下的情况下。
Sales
id userId
sales001 user001
sales002 user002
SalesDetails
id userID salesId itemId count status
salesDetails001 user001 sales001 item001 1 1
salesDetails002 user001 sales001 item002 2 1
salesDetails003 user002 sales002 item001 1 1
salesDetails004 user002 sales002 item002 3 1
Item
id itemName price
item001 book 100
item002 cd 200
我想获取一个包含两个销售域数据的 JSON。
{
"sales" : [
{
"id": "sales001",
"userId": "user001",
"salesDetails": [
{
"salesId": "sales001",
"itemId": "item001",
"itemName": "book",
"count": 1
},
{
"salesId": "sales001",
"itemId": "item002",
"itemName": "cd",
"count": 2
}
]
},
{
"id": "sales002",
"userId": "user002",
"salesDetails": [
{
"salesId": "sales002",
"itemId": "item001",
"itemName": "book",
"count": 1
},
{
"salesId": "sales002",
"itemId": "item002",
"itemName": "cd",
"count": 3
}
]
}
]
}
如果在 SQL 中,我认为查询如下所示。
select * from sales s1
where exists (
select s2.id from sales s2
inner join sales_details sd on s2.id = sd.sales_id
inner join item i on sd.item_id = i.id where s1.id = s2.id
where i.name = 'book' and s1.id = s2.id) // search conditions on Sales, SalesDetails, or Item
limit 2; // limit Sales
我读过http://gorm.grails.org/6.0.x/hibernate/manual/index.html#criteria, 但我不知道如何加入三个表和限制。 如何在 Grails 中创建查询?
【问题讨论】:
-
您可以使用 hql 并根据您的 sql 查询对其进行定制:stackoverflow.com/questions/39453576/…
标签: grails grails-orm