簡體   English   中英

如何使用原始 SQL 查詢在 Moqui 中查找實體?

[英]How to use raw SQL query to find entity in Moqui?

我認為有很好的方法可以通過視圖實體從 MySQL 中查找實體數據。 但是在這里我在某些情況下需要使用來自 MySQL 數據庫的非常復雜的查詢,它喜歡max函數與group byorder by條件。 有沒有辦法在 Moqui 中使用復雜查詢?

使用腳本標簽,您可以在其中通過ExecutionContext getEntitygetConnection獲得與數據庫的連接。

ExecutionContext ec = context.ec
Connection con = ec.getEntity().getConnection(groupName)
def statement = con.createStatement()
def queryResult = statement.executeQuery(query)

然后只需按照java.sql文檔中的描述處理結果並將其設置為先前定義的字段標記。

確實,您可以使用 View Entity 實現相當復雜的查詢。 查看entity-definition-2.1.xsd文件以獲取更多詳細信息。 您可以將聚合函數與<alias function="...一起使用,並且將自動生成 GROUP BY 子句。也支持<order-by>元素。

此外,您可以通過嵌套<complex-alias>元素來利用任何 SQL 函數和復雜表達式。 請記住,您可以使用<member-entity join-from-alias="...創建 INNER JOIN 實體組合,並使用<member-entity join-from-alias="..." join-optional="true"創建 OUTER JOIN .

盡量堅持 SQL 標准,以保持視圖實體獨立於數據庫引擎。

要詳細說明@lombardo2 的解決方案:

<script>
    org.moqui.context.ExecutionContext ec = context.ec
    java.sql.Connection con = ec.getEntity().getConnection('transactional')
    def statement = con.createStatement()
    def result = statement.executeQuery("select PAYMENT_ID, PAYMENT_METHOD_ID from PAYMENT where PAYMENT_ID = '$paymentId';")
    result.next()
</script>
<log message="======result1: ${result.getString(1)}"/>
<log message="======result2: ${result.getString(2)}"/>

暫無
暫無

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

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