Issue using order by in getEjbql()-xxxxlist.java
valatharv Oct 19, 2009 9:08 PMHi,
I am trying to use "order by item.itemName" in "getEjbql()" - default generated by seam.
When xhtml page loads list of items are displayed in correct order BUT when I click "ItemName" header to sort again it gives the following exception...
Order by is added twice...
"select item from com.Item item order by item.itemName order by itemName asc"
Please suggest how to handle this....
------------------------------------------------------
javax.faces.FacesException: javax.el.ELException: /ItemList.xhtml @41,57 rendered="#{empty itemList.resultList}": Error reading 'resultList' on type com.ItemList_$$_javassist_1
............................
Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: order near line 1, column 86 [select item from com.Item item order by item.itemName order by itemName asc]
............................
Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: order near line 1, column 86 [select item from com.Item item order by item.itemName order by itemName asc]
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:31)
------------------------------------------------------
@Name("itemList")
public class ItemList extends EntityQuery {
private static final String[] RESTRICTIONS = {"lower(item.itemName) like concat(lower(#{itemList.item.itemName}),'%')",};
@Override
public String getEjbql() {
//return "select item from Item item";
return "select item from Item item order by item.itemName";
}
}
XHTML:
------
<rich:panel>
<f:facet name="header">Item search results</f:facet>
<div class="results" id="itemList">
<h:outputText value="The item search returned no results." rendered="#{empty itemList.resultList}"/>
<rich:dataTable id="itemList" var="item" value="#{itemList.resultList}" rendered="#{not empty itemList.resultList}">
<h:column>
<f:facet name="header">
<s:link styleClass="columnHeader"
value="itemName #{itemList.order=='itemName asc' ? messages.down : ( itemList.order=='itemName desc' ? messages.up : '' )}">
<f:param name="order" value="#{itemList.order=='itemName asc' ? 'itemName desc' : 'itemName asc'}"/>
</s:link>
</f:facet>
#{item.itemName}
</h:column>
..
</rich:dataTable>
I am trying to use "order by item.itemName" in "getEjbql()" - default generated by seam.
When xhtml page loads list of items are displayed in correct order BUT when I click "ItemName" header to sort again it gives the following exception...
Order by is added twice...
"select item from com.Item item order by item.itemName order by itemName asc"
Please suggest how to handle this....
------------------------------------------------------
javax.faces.FacesException: javax.el.ELException: /ItemList.xhtml @41,57 rendered="#{empty itemList.resultList}": Error reading 'resultList' on type com.ItemList_$$_javassist_1
............................
Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: order near line 1, column 86 [select item from com.Item item order by item.itemName order by itemName asc]
............................
Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: order near line 1, column 86 [select item from com.Item item order by item.itemName order by itemName asc]
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:31)
------------------------------------------------------
@Name("itemList")
public class ItemList extends EntityQuery {
private static final String[] RESTRICTIONS = {"lower(item.itemName) like concat(lower(#{itemList.item.itemName}),'%')",};
@Override
public String getEjbql() {
//return "select item from Item item";
return "select item from Item item order by item.itemName";
}
}
XHTML:
------
<rich:panel>
<f:facet name="header">Item search results</f:facet>
<div class="results" id="itemList">
<h:outputText value="The item search returned no results." rendered="#{empty itemList.resultList}"/>
<rich:dataTable id="itemList" var="item" value="#{itemList.resultList}" rendered="#{not empty itemList.resultList}">
<h:column>
<f:facet name="header">
<s:link styleClass="columnHeader"
value="itemName #{itemList.order=='itemName asc' ? messages.down : ( itemList.order=='itemName desc' ? messages.up : '' )}">
<f:param name="order" value="#{itemList.order=='itemName asc' ? 'itemName desc' : 'itemName asc'}"/>
</s:link>
</f:facet>
#{item.itemName}
</h:column>
..
</rich:dataTable>