[英]How to use raw SQL query to find entity in Moqui?
我認為有很好的方法可以通過視圖實體從 MySQL 中查找實體數據。 但是在這里我在某些情況下需要使用來自 MySQL 數據庫的非常復雜的查詢,它喜歡max
函數與group by
和order by
條件。 有沒有辦法在 Moqui 中使用復雜查詢?
使用腳本標簽,您可以在其中通過ExecutionContext getEntity
和getConnection
獲得與數據庫的連接。
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.