应用中的一点小问题,记下来备忘。
先看一下类配置文件:
Activity.hbm.xml:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.kingstargroup.eqa.evaluation.domain"> <class name="Activity" table="EVA_ACTIVITY"> <id name="id" type="string"> <generator class="sequence"> <param name="sequence">SEQ_MODEL</param> </generator> </id> <property name="name" /> <property name="description" column="DESP" /> <property name="open" column="IS_OPEN" /> <property name="subject" /> <property name="published" column="IS_PUBLISHED" /> <property name="methods" column="METHOD" /> <many-to-one name="model" column="MODEL_ID" /> <set name="objects" inverse="true" cascade="all" order-by="ID"> <key column="ACT_ID" /> <one-to-many class="EvaObject"/> </set> <set name="expertGroup" inverse="true" cascade="all"> <key column="ACT_ID" /> <one-to-many class="ExpertGroup"/> </set> </class> </hibernate-mapping>再来看一下页面展示部分,注意一下标红的部分:
<ec:table items="activityList" var="act" width="100%" form="activityForm" action="listActivities.do"
retrieveRowsCallback="limit" sortRowsCallback="limit" autoIncludeParameters="true">
<ec:row>
<ec:column property="itemlist" sortable="false" width="30" headerCell="selectAll">
<input type="checkbox" name="itemlist" value="${act.id}" />
<input type="hidden" name="openValue" value="${act.open}" />
</ec:column>
<ec:column property="rowCount" cell="rowCount" title="序号" sortable="false" />
<ec:column property="name" title="名称" />
<ec:column property="model.name" title="采用模型" alias="modelname" />
<ec:column property="published" title="是否发布">
<c:if test="${act.published == true }">
是
</c:if>
<c:if test="${act.published == false }">
否
</c:if>
</ec:column>
<ec:column property="open" title="是否开放">
<c:if test="${act.open=='1'}">
是
</c:if>
<c:if test="${act.open=='0'}">
否
</c:if>
</ec:column>
<ec:column property="description" title="描述" sortable="false" />
</ec:row>
</ec:table>
接下来是Criteria查询,注意作了标记的代码: private static Criteria createAcvivitylCriteria(String category, String open, Session session) {
Criteria c = session.createCriteria(Activity.class);
if (StringUtils.isNotBlank(category))
c.add(Restrictions.eq("subject", category));
if (StringUtils.isNotBlank(open))
c.add(Restrictions.eq("open", open));
c.createAlias("model","model"); //其实就是加个别名
return c;
}
现在来说一下加别名的原因:在页面上用了<ec:table>展示,且有一个列是 Activity.model.name,当不加别名时,对此列一排序,程序就报错啦!