hibernate的Criteria作连表查询

Hibernater中,用Criteria作查询,如果所查询的对象PO中的属性也有一个对象PO,而且要把这个属性PO里的某个属性作为一个查询条件,则必须先为这个属性PO起一个别名!例子如下所示:有一产品表product与一产品类型表type,对应的PO为Product.java、Type.java,对应的映射文件为:Product.hbm.xml、Type.hbm.xml,映射文件如下:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--     Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping>    <class name="com.qhit.po.Product" table="product" catalog="test">        <id name="pid" type="integer">            <column name="pid" />            <generator class="native" />        </id>        <many-to-one name="type" class="com.qhit.po.Type" lazy="false" >            <column name="typeid" />        </many-to-one>        <property name="pname" type="string">            <column name="pname" length="50" not-null="true" />        </property>    </class></hibernate-mapping>    

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--     Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping>    <class name="com.qhit.po.Type" table="type" catalog="test">        <id name="typeid" type="integer">            <column name="typeid" />            <generator class="native" />        </id>        <property name="typename" type="string">            <column name="typename" length="50" not-null="true" />        </property>        <set name="products" inverse="true" cascade="save-update">            <key>                <column name="typeid" />            </key>            <one-to-many class="com.qhit.po.Product" />        </set>    </class></hibernate-mapping>  

查询的例子如下所示:

Session session = HibernateSessionFactory.getSession();    Criteria cri = session.createCriteria(Product.class);    cri.createAlias("type", "b");    cri.add(Restrictions.eq("pid", 2));  cri.add(Restrictions.like("pname", "%香%"));  cri.add(Restrictions.eq("b.typeid", 2));  cri.add(Restrictions.eq("b.typename", "水果"));    List list = cri.list();  for(int i=0;i<list.size();i++){   Product p = (Product)list.get(i);      System.out.println("pid = " + p.getPid() + ":pname = " + p.getPname() + ":typeid = " + p.getType().getTypeid() + ":typename" + p.getType().getTypename());  }  session.close();

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值