Dept和Emp是一对多关系,我这样使用createCriteria关联两个实体(一对多)在Expression.sql中这样使用{alias}区分两个实体为生成的sql不对,代码如下:
   package org.test;import java.util.Collection;
import java.util.Iterator;
import java.util.List;import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Expression;
import org.itfuture.www.admin.Dept;public class TestApp{ public TestApp() {

}
public static void main(String[] args)
{

  query(" and {alias}.deptNaMe is not null and {alias}.A.empname is not null");

}
        public static void query(String cond)
        {
       Configuration conf=new Configuration().configure();
          SessionFactory f=conf.buildSessionFactory();
          Session s=f.openSession();
          Criteria c=s.createCriteria(Dept.class).createAlias("emps","A").add(Expression.sql("1=1 "+cond));
          List list=c.list();
          System.out.println(list); 
     s.close();
          f.close();
       }
}
Dept和Emp的hbm配置如下:
<?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="org.admin">
    <class name="Dept" table="dept">
      <id name="deptid" type="java.lang.Integer" column="deptid">
        <generator class="assigned"></generator>
      </id>
      <property name="deptname" type="java.lang.String" column="deptname"/>
      <property name="deptnum" type="java.lang.Integer" column="deptnum"></property>
      <property name="deptdesc" type="java.lang.String" column="deptdesc"></property>
      <set name="emps" table="emp" cascade="all" lazy="false" outer-join="false" inverse="false"><!--????-->
         <key column="deptid"></key>
         <one-to-many class="Emp"/>
      </set>
    </class>
  </hibernate-mapping>   <?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="org.admin">
  <class name="Emp" table="emp">
    <id name="empid" type="integer" column="empid">
      <generator class="assigned"></generator>
    </id>
    <property name="empname" type="string" column="empname"/>
    <property name="sex" type="string" column="sex"/>
    <property name="age" type="integer" column="age"/>
    <property name="phone" type="string" column="phone"/>
    <property name="address" type="string" column="address"/>
   <many-to-one name="onedept" class="Dept" column="deptid"  cascade="save-update"></many-to-one>
</class>
</hibernate-mapping>