2016-06-15 79 views
1
 <ViewObject name ="emp" selectList="select * from employees" Where= "empno=?" /> 

我的動作類裏面,我想改變where條件sal=10導致select * from employees Where sal =10ADF ViewObject-動態改變where子句

我不希望WHERE子句中的empno列。

vo.setwhereclause(null)未清除empno =?。它在現有的where子句中附加sal=?

如何解決這個問題?

回答

0

也許這將幫助你解決這個問題:

<ViewObject name="emp" selectList="select * from employees" Where="sal=10" /> 
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(); 
+0

新的where子句附加到初始查詢。所以現在我的sql是select * from employees where empno =?和薩爾= 10。無論如何,我可以避免這種情況嗎? – rookieDeveloper

+0

好吧,然後嘗試更改整個SQL使用setQuery(String newSql) – vssk

1

做到這一點最簡單的方法是不包括其中,param在您的視圖對象查詢,但使用其中,param通過動態回Bean或託管bean功能碼一樣,

ViewObject vo1 = applicationmoduleobject.findViewObject("viewobjectname"); 
vo.setWhereClause(" CREATED_BY = userId and ASSIGNMENT_ID = assignId"); 
long count = vo.getEstimatedRowCount(); 

在這裏,在你的視圖對象中使用簡單的「select * query」,並使用bean方法動態添加where子句並執行你的視圖對象。

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();