外键表的hbm.xml配置:   <class name="pojo.DorkingInfo" table="DorkingInfo" schema="dbo" catalog="TraceSystem">
        <id name="dorkingNumber" type="java.lang.Integer">
            <column name="DorkingNumber" />
            <generator class="identity" />
        </id>
        <set name="productTraceInfos" inverse="true">
            <key>
                <column name="DorkingNumber" />
            </key>
            <one-to-many class="pojo.ProductTraceInfo" />
        </set>
    </class>
主键表的hbm.xml配置:
        <many-to-one name="dorkingInfo" class="pojo.DorkingInfo" fetch="select" outer-join="true" lazy="false">
            <column name="DorkingNumber" />
        </many-to-one>DAO层的方法:
public List findByExample(Object object) {
// TODO Auto-generated method stub
try {
return this.getHibernateTemplate().findByExample(object);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return null;
}
}Action里的代码1:
String number = (String) request.getParameter("dorkingNumber");//获取外键表里的一个值
ProductTraceInfo pInfo = new ProductTraceInfo();
DorkingInfo dk = new DorkingInfo();
dk.setDorkingNumber(new Integer(number));//设置外键表映射的POJO里的值
pInfo.setDorkingInfo(dk);
List list = service.findByExample(pInfo);//根据主键表POJO查询
System.out.println(list.size());//我外键表里只有一条DorkingNumber为1的记录,我想的是输入1之后查出这条记录
                                                       //但是无论我输入什么数,这里都会把那条仅有的记录查出来,也就应该是程序把主键表里的所有记录都读了
                                                       //请问这个我要怎么做?

解决方案 »

  1.   

    如果我从主键表里获取每个外键表的对象,然后设置他们里面的值.然后再保存主键表的对象,是不是hibernate就把数据自动插入到外键表里了?
      

  2.   

    <many-to-one>中有一个cascade属性可以设置
      

  3.   

    如果查出主键表,然后get里面的外键表的对象,再次赋值,然后直接save主键表的对象,外键表会自动保存的
      

  4.   

    现在还是查询的问题,照理来说,我创建ProductTraceInfo的对象:
    ProductTraceInfo pInfo = new ProductTraceInfo();
    和他的子对象:
    DorkingInfo dk = new DorkingInfo();
    然后设置子对象的值:
    dk.setDorkingNumber(new Integer(number);
    把子对象加到:ProductTraceInfo中:
            pInfo.setDorkingInfo(dk);
    然后查询:
            List list = service.findByExample(pInfo);
            应该只查出我对应的单条记录才对啊.昨天又加了两条记录进去,无论我输入什么,甚至是不存在的number号,它都把所有记录读出来了.郁闷死了.请大家千万帮忙啊!就算是发个类似的示例代码给我看看也行
      

  5.   


    <set name="productTraceInfos" inverse="true" cascade="all">
                <key>
                    <column name="DorkingNumber" />
                </key>
                <one-to-many class="pojo.ProductTraceInfo" />
            </set>这样Hibernate会自动维护他们之间的级联关系的