我想自定义ORM的更新功能。默认情况下,ORM 会加载需要更新的对象,进行更新,然后保存该对象。我想在满足某个条件时更新记录。
例如 :
我想将付款方式从信用卡更新为现金。在更新记录之前,我想检查我是否已经有现金支付模式。如果存在,那么我不需要更新记录,否则更新记录。
对于上面的检查,我使用了这个 SQL:
SELECT COUNT(*)
FROM hr_lookup_paymentmode
WHERE PaymentMode = 'cash'
AND modeid <> '10'
等效 HQL:
/**
* @hint Determines total number of results with same value of search for update purposes.
*/
remote numeric function searchUpdateCount(string q,numeric modeid ) output="false" {
var hqlString = "";
var whereClause = "";
var params = {};
hqlString = hqlString & "SELECT count(*) ";
hqlString = hqlString & "FROM hr_lookup_paymentmode";
if (len(arguments.q) gt 0)
{
whereClause = ListAppend(whereClause, " PaymentMode = '#arguments.q#'", "|");
whereClause = ListAppend(whereClause, "modeid <> '#arguments.modeid#'", "|");
whereClause = Replace(whereClause, "|", " AND ", "all");
}
if (len(whereClause) gt 0){
hqlString = hqlString & " WHERE " & whereClause;
}
return ormExecuteQuery(hqlString, false, params)[1];
}
参数q = 'cash'
和modeid = 10
。如果找到的计数大于 0 表示记录已经存在,否则进行更新。
请帮我应用这个逻辑。