簡體   English   中英

如何在Grails中創建子查詢

[英]How to create sub query in Grails

我使用Grails 3.2.0.M2和PostgreSQL 9.4.1。

我正在創建Web API,該API將銷售數據作為JSON返回。 網址是這樣的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中創建查詢?

我對您的ID定義為String感到有些困惑。

在這種情況下,您必須在域類映射中使用以下內容定義ID:

static mapping = {
    id generator: 'assigned'
}

並自己提供ID。

您其他問題的解決方案可能是:

    def query = Sales.where {
        salesDetail {
            item.itemName == 'Book'
        }
    }

    respond query.list([sort: 'userId', max: 2])

您也可以嘗試限制:

respond query.list([sort: 'userId'])[0..1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM