}
private Object handleNativeQueryNative(NativeQuery nativeQuery, Object obj, Method m, Object[] args){
Map<String, Object> params = getParams(m, args);
Page page = getPage(args);
boolean pagable = (page != null) ||nativeQuery.pagable();
String queryName = nativeQuery.value();
if(queryName.equals("")){
if(!(obj instanceof ModelClassSupport))
throw new RuntimeException("QueryName can not be empty");
ModelClassSupport mcs = (ModelClassSupport)obj;
queryName += mcs.getModelClass().getSimpleName();
queryName += "." + m.getName();
}
String queryStringWithName = getDynamicQuery(queryName, params);
List<Object> conditions = new ArrayList<Object>();
String queryString = getNativeQuery(queryStringWithName, params, conditions);
if(logger.isDebugEnabled()){
logger.debug("NativeQuery[{}] will be executed", queryName);
logger.debug("{}",queryString);
}
Sort[] sorts = getSorts(args);
RowMapper<?> rowMapper = getRowMapper(args);
if(rowMapper == null && (!nativeQuery.model().equals(DEFAULT.class))){
ColumnTranslator t = null;
try {
if(!DummyColumnTranslator.class.equals(nativeQuery.translator())){
t = nativeQuery.translator().newInstance();
t.setModelClass(nativeQuery.model());
}
} catch (Exception e) {
//do nothing
}
rowMapper = new CommonBeanRowMapper(nativeQuery.model(), t, nativeQuery.alias());
}
if(rowMapper == null && (nativeQuery.alias() == null || nativeQuery.clazzes() == null
|| nativeQuery.alias().length == 0
|| nativeQuery.clazzes().length == 0))
throw new IllegalArgumentException("No return type definition found.");
if(rowMapper == null && nativeQuery.alias().length != nativeQuery.clazzes().length)
throw new IllegalArgumentException("Return alias and class definition are not matched.");
if(rowMapper == null)
rowMapper = new MapRowMapper(nativeQuery.alias(), nativeQuery.clazzes());
if(sorts != null){
logger.debug("Query need be sorted with :" + Arrays.asList(sorts));
}
if(List.class.isAssignableFrom(m.getReturnType())){
if(pagable){
if(page != null)
return daoService.findByNativeQuery(queryString, conditions.toArray(), sorts,
page.getStart(), page.getSize(), rowMapper);
else if(args[0] instanceof Integer &&
args[1] instanceof Integer)
return daoService.findByNativeQuery(queryString, conditions.toArray(), sorts,
(Integer)args[0], (Integer)args[1], rowMapper);
else
throw new IllegalArgumentException("Startindex and pagesize must be set for pagable query.");
}else{
return daoService.findByNativeQuery(queryString, conditions.toArray(), sorts,
-1, -1, rowMapper);
}
}else if(Pagination.class.isAssignableFrom(m.getReturnType())){
if(pagable){
if(page != null)
return daoService.findByNativeQuery(queryString, conditions.toArray(), sorts,
page.getStart(), page.getSize(), nativeQuery.withGroupby(), rowMapper);
else if(args[0] instanceof Integer &&
args[1] instanceof Integer)
return daoService.findByNativeQuery(queryString, conditions.toArray(), sorts,
(Integer)args[0], (Integer)args[1], nativeQuery.withGroupby(), rowMapper);
else