2016-06-15 127 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();