HardWorker.new.perform
在我的操作类中,我想将where条件更改为 <ViewObject name ="emp" selectList="select * from employees" Where= "empno=?" />
,导致sal=10
。
我不希望select * from employees Where sal =10
子句中的empno
列。
WHERE
未清除vo.setwhereclause(null)
。它将empno =?
附加到现有的where子句。
如何解决这个问题?
答案 0 :(得分:1)
最简单的方法是不要在视图对象查询中包含param,而是通过back bean或托管bean函数代码动态使用where param,
ViewObject vo1 = applicationmoduleobject.findViewObject("viewobjectname");
vo.setWhereClause(" CREATED_BY = userId and ASSIGNMENT_ID = assignId");
long count = vo.getEstimatedRowCount();
在这里,在你的视图对象中使用简单的&#34; select * query&#34;并使用bean方法动态添加where子句并执行您的视图对象。
答案 1 :(得分:0)
也许这会帮助你解决它:
<ViewObject name="emp" selectList="select * from employees" Where="sal=10" />
答案 2 :(得分:0)
默认情况下,ViewObject将where子句扩充到现有的sql代码。 要避免此问题,您应该使用ViewObject.FULLSQL_MODE_AUGMENTATION属性。例如:
ViewObject vo = getViewObject();
vo.setFullSqlMode(voi.FULLSQL_MODE_AUGMENTATION);
vo.setWhereClause("sal=:sal"); //or use setSql()
vo.setWhereClauseParam("sal",10.00);
vo.clearCache();
vo.executeQuery();
答案 3 :(得分:0)
动态子句只能附加到VO查询。如果需要从VO查询中删除任何子句,则不存在任何方法,因此以下代码可用作解决方法:
System.out.println("Original query: " +sanctVo.getQuery());
sanctVo.setQuery("select * from employees where sal = :1");
sanctVo.setWhereClauseParam(0, 10);
System.out.println("New query: " +sanctVo.getQuery());
sanctVo.executeQuery();